diff options
author | Nilay Vaish <nilay@cs.wisc.edu> | 2014-05-23 06:07:02 -0500 |
---|---|---|
committer | Nilay Vaish <nilay@cs.wisc.edu> | 2014-05-23 06:07:02 -0500 |
commit | 8bf41e41c142b2c8618eed0b786c64e10dcacb1e (patch) | |
tree | 7f43fa0ea9407beb0cc535b567e248f2db7078e9 /src/mem/ruby | |
parent | 1e26b7ea29ead4a67a060cc66cd72a193db9c766 (diff) | |
download | gem5-8bf41e41c142b2c8618eed0b786c64e10dcacb1e.tar.xz |
ruby: message buffer: drop dequeue_getDelayCycles()
The functionality of updating and returning the delay cycles would now be
performed by the dequeue() function itself.
Diffstat (limited to 'src/mem/ruby')
-rw-r--r-- | src/mem/ruby/buffers/MessageBuffer.cc | 17 | ||||
-rw-r--r-- | src/mem/ruby/buffers/MessageBuffer.hh | 6 | ||||
-rw-r--r-- | src/mem/ruby/network/simple/PerfectSwitch.cc | 8 | ||||
-rw-r--r-- | src/mem/ruby/network/simple/Throttle.cc | 2 |
4 files changed, 13 insertions, 20 deletions
diff --git a/src/mem/ruby/buffers/MessageBuffer.cc b/src/mem/ruby/buffers/MessageBuffer.cc index 19ad9ee7d..298fdb3c3 100644 --- a/src/mem/ruby/buffers/MessageBuffer.cc +++ b/src/mem/ruby/buffers/MessageBuffer.cc @@ -220,8 +220,11 @@ MessageBuffer::enqueue(MsgPtr message, Cycles delta) } Cycles -MessageBuffer::dequeue_getDelayCycles() +MessageBuffer::dequeue() { + DPRINTF(RubyQueue, "Popping\n"); + assert(isReady()); + // get MsgPtr of the message about to be dequeued MsgPtr message = m_prio_heap.front().m_msgptr; @@ -229,16 +232,6 @@ MessageBuffer::dequeue_getDelayCycles() message->updateDelayedTicks(m_receiver->clockEdge()); Cycles delayCycles = m_receiver->ticksToCycles(message->getDelayedTicks()); - dequeue(); - - return delayCycles; -} - -void -MessageBuffer::dequeue() -{ - DPRINTF(RubyQueue, "Popping\n"); - assert(isReady()); // record previous size and time so the current buffer size isn't // adjusted until next cycle @@ -250,6 +243,8 @@ MessageBuffer::dequeue() pop_heap(m_prio_heap.begin(), m_prio_heap.end(), greater<MessageBufferNode>()); m_prio_heap.pop_back(); + + return delayCycles; } void diff --git a/src/mem/ruby/buffers/MessageBuffer.hh b/src/mem/ruby/buffers/MessageBuffer.hh index 6019f3d6c..3b3a69a3e 100644 --- a/src/mem/ruby/buffers/MessageBuffer.hh +++ b/src/mem/ruby/buffers/MessageBuffer.hh @@ -118,11 +118,9 @@ class MessageBuffer void enqueue(MsgPtr message) { enqueue(message, Cycles(1)); } void enqueue(MsgPtr message, Cycles delta); - //! Updates the delay cycles of the message at the of the queue, + //! Updates the delay cycles of the message at the head of the queue, //! removes it from the queue and returns its total delay. - Cycles dequeue_getDelayCycles(); - - void dequeue(); + Cycles dequeue(); void recycle(); bool isEmpty() const { return m_prio_heap.size() == 0; } diff --git a/src/mem/ruby/network/simple/PerfectSwitch.cc b/src/mem/ruby/network/simple/PerfectSwitch.cc index ecd1eb0be..cf2430e36 100644 --- a/src/mem/ruby/network/simple/PerfectSwitch.cc +++ b/src/mem/ruby/network/simple/PerfectSwitch.cc @@ -260,6 +260,10 @@ PerfectSwitch::wakeup() unmodified_msg_ptr = msg_ptr->clone(); } + // Dequeue msg + m_in[incoming][vnet]->dequeue(); + m_pending_message_count[vnet]--; + // Enqueue it - for all outgoing queues for (int i=0; i<output_links.size(); i++) { int outgoing = output_links[i]; @@ -284,10 +288,6 @@ PerfectSwitch::wakeup() m_out[outgoing][vnet]->enqueue(msg_ptr); } - - // Dequeue msg - m_in[incoming][vnet]->dequeue(); - m_pending_message_count[vnet]--; } } } diff --git a/src/mem/ruby/network/simple/Throttle.cc b/src/mem/ruby/network/simple/Throttle.cc index 778436c6d..da7b1732b 100644 --- a/src/mem/ruby/network/simple/Throttle.cc +++ b/src/mem/ruby/network/simple/Throttle.cc @@ -157,8 +157,8 @@ Throttle::wakeup() g_system_ptr->curCycle()); // Move the message - m_out[vnet]->enqueue(m_in[vnet]->peekMsgPtr(), m_link_latency); m_in[vnet]->dequeue(); + m_out[vnet]->enqueue(msg_ptr, m_link_latency); // Count the message m_msg_counts[net_msg_ptr->getMessageSize()][vnet]++; |