SimpleNetwork.cc (10303:71e0934af9f1) | SimpleNetwork.cc (10311:ad9c042dce54) |
---|---|
1/* 2 * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; --- 79 unchanged lines hidden (view full) --- 88 const NetDest& routing_table_entry) 89{ 90 assert(dest < m_nodes); 91 assert(src < m_switches.size()); 92 assert(m_switches[src] != NULL); 93 94 SimpleExtLink *simple_link = safe_cast<SimpleExtLink*>(link); 95 | 1/* 2 * Copyright (c) 1999-2008 Mark D. Hill and David A. Wood 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; --- 79 unchanged lines hidden (view full) --- 88 const NetDest& routing_table_entry) 89{ 90 assert(dest < m_nodes); 91 assert(src < m_switches.size()); 92 assert(m_switches[src] != NULL); 93 94 SimpleExtLink *simple_link = safe_cast<SimpleExtLink*>(link); 95 |
96 m_switches[src]->addOutPort(m_fromNetQueues[dest], 97 routing_table_entry, 98 simple_link->m_latency, 99 simple_link->m_bw_multiplier); | 96 m_switches[src]->addOutPort(m_fromNetQueues[dest], routing_table_entry, 97 simple_link->m_latency, 98 simple_link->m_bw_multiplier); |
100 101 m_endpoint_switches[dest] = m_switches[src]; 102} 103 104// From an endpoint node to a switch 105void 106SimpleNetwork::makeInLink(NodeID src, SwitchID dest, BasicLink* link, 107 LinkDirection direction, --- 5 unchanged lines hidden (view full) --- 113 114// From a switch to a switch 115void 116SimpleNetwork::makeInternalLink(SwitchID src, SwitchID dest, BasicLink* link, 117 LinkDirection direction, 118 const NetDest& routing_table_entry) 119{ 120 // Create a set of new MessageBuffers | 99 100 m_endpoint_switches[dest] = m_switches[src]; 101} 102 103// From an endpoint node to a switch 104void 105SimpleNetwork::makeInLink(NodeID src, SwitchID dest, BasicLink* link, 106 LinkDirection direction, --- 5 unchanged lines hidden (view full) --- 112 113// From a switch to a switch 114void 115SimpleNetwork::makeInternalLink(SwitchID src, SwitchID dest, BasicLink* link, 116 LinkDirection direction, 117 const NetDest& routing_table_entry) 118{ 119 // Create a set of new MessageBuffers |
121 std::vector<MessageBuffer*> queues; | 120 std::map<int, MessageBuffer*> queues; |
122 for (int i = 0; i < m_virtual_networks; i++) { 123 // allocate a buffer 124 MessageBuffer* buffer_ptr = new MessageBuffer; 125 buffer_ptr->setOrdering(true); | 121 for (int i = 0; i < m_virtual_networks; i++) { 122 // allocate a buffer 123 MessageBuffer* buffer_ptr = new MessageBuffer; 124 buffer_ptr->setOrdering(true); |
125 |
|
126 if (m_buffer_size > 0) { 127 buffer_ptr->resize(m_buffer_size); 128 } | 126 if (m_buffer_size > 0) { 127 buffer_ptr->resize(m_buffer_size); 128 } |
129 queues.push_back(buffer_ptr); | 129 130 queues[i] = buffer_ptr; |
130 // remember to deallocate it 131 m_buffers_to_free.push_back(buffer_ptr); 132 } | 131 // remember to deallocate it 132 m_buffers_to_free.push_back(buffer_ptr); 133 } |
134 |
|
133 // Connect it to the two switches 134 SimpleIntLink *simple_link = safe_cast<SimpleIntLink*>(link); 135 136 m_switches[dest]->addInPort(queues); 137 m_switches[src]->addOutPort(queues, routing_table_entry, | 135 // Connect it to the two switches 136 SimpleIntLink *simple_link = safe_cast<SimpleIntLink*>(link); 137 138 m_switches[dest]->addInPort(queues); 139 m_switches[src]->addOutPort(queues, routing_table_entry, |
138 simple_link->m_latency, 139 simple_link->m_bw_multiplier); | 140 simple_link->m_latency, 141 simple_link->m_bw_multiplier); |
140} 141 142void 143SimpleNetwork::checkNetworkAllocation(NodeID id, bool ordered, int network_num) 144{ 145 assert(id < m_nodes); 146 assert(network_num < m_virtual_networks); 147 148 if (ordered) { 149 m_ordered[network_num] = true; 150 } 151 m_in_use[network_num] = true; 152} 153 | 142} 143 144void 145SimpleNetwork::checkNetworkAllocation(NodeID id, bool ordered, int network_num) 146{ 147 assert(id < m_nodes); 148 assert(network_num < m_virtual_networks); 149 150 if (ordered) { 151 m_ordered[network_num] = true; 152 } 153 m_in_use[network_num] = true; 154} 155 |
154MessageBuffer* 155SimpleNetwork::getToNetQueue(NodeID id, bool ordered, int network_num, 156 std::string vnet_type) | 156void 157SimpleNetwork::setToNetQueue(NodeID id, bool ordered, int network_num, 158 std::string vnet_type, MessageBuffer *b) |
157{ 158 checkNetworkAllocation(id, ordered, network_num); | 159{ 160 checkNetworkAllocation(id, ordered, network_num); |
159 return m_toNetQueues[id][network_num]; | 161 m_toNetQueues[id][network_num] = b; |
160} 161 | 162} 163 |
162MessageBuffer* 163SimpleNetwork::getFromNetQueue(NodeID id, bool ordered, int network_num, 164 std::string vnet_type) | 164void 165SimpleNetwork::setFromNetQueue(NodeID id, bool ordered, int network_num, 166 std::string vnet_type, MessageBuffer *b) |
165{ 166 checkNetworkAllocation(id, ordered, network_num); | 167{ 168 checkNetworkAllocation(id, ordered, network_num); |
167 return m_fromNetQueues[id][network_num]; | 169 m_fromNetQueues[id][network_num] = b; |
168} 169 170void 171SimpleNetwork::regStats() 172{ 173 for (MessageSizeType type = MessageSizeType_FIRST; 174 type < MessageSizeType_NUM; ++type) { 175 m_msg_counts[(unsigned int) type] --- 77 unchanged lines hidden --- | 170} 171 172void 173SimpleNetwork::regStats() 174{ 175 for (MessageSizeType type = MessageSizeType_FIRST; 176 type < MessageSizeType_NUM; ++type) { 177 m_msg_counts[(unsigned int) type] --- 77 unchanged lines hidden --- |