changeset fe4eb64480bf in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=fe4eb64480bf
description:
        ruby: message buffer node: used Tick in place of Cycles
        The message buffer node used to keep time in terms of Cycles. Since the
        sender and the receiver can have different clock periods, storing node
        time in cycles requires some conversion. Instead store the time directly
        in Ticks.

diffstat:

 src/mem/ruby/buffers/MessageBuffer.cc     |  22 +++++++++++-----------
 src/mem/ruby/buffers/MessageBufferNode.hh |   4 ++--
 2 files changed, 13 insertions(+), 13 deletions(-)

diffs (107 lines):

diff -r 34df8f24be7e -r fe4eb64480bf src/mem/ruby/buffers/MessageBuffer.cc
--- a/src/mem/ruby/buffers/MessageBuffer.cc     Fri Mar 22 15:53:26 2013 -0500
+++ b/src/mem/ruby/buffers/MessageBuffer.cc     Fri Mar 22 15:53:26 2013 -0500
@@ -221,7 +221,8 @@
     msg_ptr->setLastEnqueueTime(arrival_time * m_receiver_ptr->clockPeriod());
 
     // Insert the message into the priority heap
-    MessageBufferNode thisNode(arrival_time, m_msg_counter, message);
+    MessageBufferNode thisNode(arrival_time * m_receiver_ptr->clockPeriod(),
+                               m_msg_counter, message);
     m_prio_heap.push_back(thisNode);
     push_heap(m_prio_heap.begin(), m_prio_heap.end(),
         greater<MessageBufferNode>());
@@ -309,7 +310,8 @@
     pop_heap(m_prio_heap.begin(), m_prio_heap.end(),
         greater<MessageBufferNode>());
 
-    node.m_time = m_receiver_ptr->curCycle() + m_recycle_latency;
+    node.m_time = (m_receiver_ptr->curCycle() + m_recycle_latency) *
+                    m_receiver_ptr->clockPeriod();
     m_prio_heap.back() = node;
     push_heap(m_prio_heap.begin(), m_prio_heap.end(),
         greater<MessageBufferNode>());
@@ -322,7 +324,7 @@
 {
     DPRINTF(RubyQueue, "ReanalyzeMessages\n");
     assert(m_stall_msg_map.count(addr) > 0);
-    Cycles nextCycle = m_receiver_ptr->curCycle() + Cycles(1);
+    Tick nextTick = m_receiver_ptr->clockEdge(Cycles(1));
 
     //
     // Put all stalled messages associated with this address back on the
@@ -330,15 +332,14 @@
     //
     while(!m_stall_msg_map[addr].empty()) {
         m_msg_counter++;
-        MessageBufferNode msgNode(nextCycle, m_msg_counter,
+        MessageBufferNode msgNode(nextTick, m_msg_counter,
                                   m_stall_msg_map[addr].front());
 
         m_prio_heap.push_back(msgNode);
         push_heap(m_prio_heap.begin(), m_prio_heap.end(),
                   greater<MessageBufferNode>());
 
-        m_consumer_ptr->
-            scheduleEventAbsolute(m_receiver_ptr->clockPeriod() * nextCycle);
+        m_consumer_ptr->scheduleEventAbsolute(nextTick);
         m_stall_msg_map[addr].pop_front();
     }
     m_stall_msg_map.erase(addr);
@@ -348,7 +349,7 @@
 MessageBuffer::reanalyzeAllMessages()
 {
     DPRINTF(RubyQueue, "ReanalyzeAllMessages %s\n");
-    Cycles nextCycle = m_receiver_ptr->curCycle() + Cycles(1);
+    Tick nextTick = m_receiver_ptr->clockEdge(Cycles(1));
 
     //
     // Put all stalled messages associated with this address back on the
@@ -360,15 +361,14 @@
 
         while(!(map_iter->second).empty()) {
             m_msg_counter++;
-            MessageBufferNode msgNode(nextCycle, m_msg_counter,
+            MessageBufferNode msgNode(nextTick, m_msg_counter,
                                       (map_iter->second).front());
 
             m_prio_heap.push_back(msgNode);
             push_heap(m_prio_heap.begin(), m_prio_heap.end(),
                       greater<MessageBufferNode>());
 
-            m_consumer_ptr->
-                scheduleEventAbsolute(m_receiver_ptr->clockPeriod() * 
nextCycle);
+            m_consumer_ptr->scheduleEventAbsolute(nextTick);
             (map_iter->second).pop_front();
         }
     }
@@ -433,7 +433,7 @@
 MessageBuffer::isReady() const
 {
     return ((m_prio_heap.size() > 0) &&
-            (m_prio_heap.front().m_time <= m_receiver_ptr->curCycle()));
+            (m_prio_heap.front().m_time <= m_receiver_ptr->clockEdge()));
 }
 
 bool
diff -r 34df8f24be7e -r fe4eb64480bf src/mem/ruby/buffers/MessageBufferNode.hh
--- a/src/mem/ruby/buffers/MessageBufferNode.hh Fri Mar 22 15:53:26 2013 -0500
+++ b/src/mem/ruby/buffers/MessageBufferNode.hh Fri Mar 22 15:53:26 2013 -0500
@@ -40,7 +40,7 @@
         : m_time(0), m_msg_counter(0)
     {}
 
-    MessageBufferNode(const Cycles& time, uint64_t counter,
+    MessageBufferNode(const Tick time, uint64_t counter,
                       const MsgPtr& msgptr)
         : m_time(time), m_msg_counter(counter), m_msgptr(msgptr)
     {}
@@ -48,7 +48,7 @@
     void print(std::ostream& out) const;
 
   public:
-    Cycles m_time;
+    Tick m_time;
     uint64_t m_msg_counter; // FIXME, should this be a 64-bit value?
     MsgPtr m_msgptr;
 };
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to