diff options
Diffstat (limited to 'src/mem/ruby/network/simple/Switch.cc')
-rw-r--r-- | src/mem/ruby/network/simple/Switch.cc | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/src/mem/ruby/network/simple/Switch.cc b/src/mem/ruby/network/simple/Switch.cc index 6e116d82c..e028de02a 100644 --- a/src/mem/ruby/network/simple/Switch.cc +++ b/src/mem/ruby/network/simple/Switch.cc @@ -64,29 +64,33 @@ Switch::init() } void -Switch::addInPort(const vector<MessageBuffer*>& in) +Switch::addInPort(const map<int, MessageBuffer*>& in) { m_perfect_switch->addInPort(in); - for (int i = 0; i < in.size(); i++) { - in[i]->setReceiver(this); + for (auto& it : in) { + it.second->setReceiver(this); } } void -Switch::addOutPort(const vector<MessageBuffer*>& out, - const NetDest& routing_table_entry, Cycles link_latency, int bw_multiplier) +Switch::addOutPort(const map<int, MessageBuffer*>& out, + const NetDest& routing_table_entry, + Cycles link_latency, int bw_multiplier) { // Create a throttle Throttle* throttle_ptr = new Throttle(m_id, m_throttles.size(), - link_latency, bw_multiplier, m_network_ptr->getEndpointBandwidth(), - this); + link_latency, bw_multiplier, + m_network_ptr->getEndpointBandwidth(), + this); + m_throttles.push_back(throttle_ptr); // Create one buffer per vnet (these are intermediaryQueues) - vector<MessageBuffer*> intermediateBuffers; - for (int i = 0; i < out.size(); i++) { - out[i]->setSender(this); + map<int, MessageBuffer*> intermediateBuffers; + + for (auto& it : out) { + it.second->setSender(this); MessageBuffer* buffer_ptr = new MessageBuffer; // Make these queues ordered @@ -95,7 +99,7 @@ Switch::addOutPort(const vector<MessageBuffer*>& out, buffer_ptr->resize(m_network_ptr->getBufferSize()); } - intermediateBuffers.push_back(buffer_ptr); + intermediateBuffers[it.first] = buffer_ptr; m_buffers_to_free.push_back(buffer_ptr); buffer_ptr->setSender(this); |