changeset 33eb3c8a98b9 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=33eb3c8a98b9
description:
        ruby: avoid using g_system_ptr for event scheduling
        This patch removes the use of g_system_ptr for event scheduling. Each 
consumer
        object now needs to specify upfront an EventManager object it would use 
for
        scheduling events. This makes the ruby memory system more amenable for a
        multi-threaded simulation.

diffstat:

 src/mem/ruby/common/Consumer.cc                                   |  14 
+---------
 src/mem/ruby/common/Consumer.hh                                   |   7 ++--
 src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.cc         |   2 +-
 src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc  |   1 +
 src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.cc       |   2 +-
 src/mem/ruby/network/garnet/fixed-pipeline/OutputUnit_d.cc        |   1 +
 src/mem/ruby/network/garnet/fixed-pipeline/SWallocator_d.cc       |   1 +
 src/mem/ruby/network/garnet/fixed-pipeline/Switch_d.cc            |   1 +
 src/mem/ruby/network/garnet/fixed-pipeline/VCallocator_d.cc       |   1 +
 src/mem/ruby/network/garnet/flexible-pipeline/FlexibleConsumer.hh |   1 +
 src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc |   1 +
 src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.cc      |   4 +-
 src/mem/ruby/network/garnet/flexible-pipeline/Router.cc           |   2 +-
 src/mem/ruby/network/garnet/flexible-pipeline/VCarbiter.cc        |   1 +
 src/mem/ruby/network/simple/PerfectSwitch.cc                      |   1 +
 src/mem/ruby/network/simple/Switch.cc                             |   4 +-
 src/mem/ruby/network/simple/Switch.hh                             |   2 -
 src/mem/ruby/network/simple/Throttle.cc                           |   8 ++++-
 src/mem/ruby/network/simple/Throttle.hh                           |   5 ++-
 src/mem/ruby/slicc_interface/AbstractController.cc                |   3 +-
 src/mem/ruby/system/AbstractMemOrCache.hh                         |   1 -
 src/mem/ruby/system/MemoryControl.cc                              |   3 +-
 src/mem/ruby/system/System.hh                                     |   1 -
 src/mem/ruby/system/WireBuffer.cc                                 |   3 --
 src/mem/ruby/system/WireBuffer.hh                                 |   3 +-
 src/mem/slicc/ast/FuncCallExprAST.py                              |   4 +-
 src/mem/slicc/symbols/StateMachine.py                             |   2 +-
 27 files changed, 37 insertions(+), 42 deletions(-)

diffs (truncated from 400 to 300 lines):

diff -r 65f927bda74d -r 33eb3c8a98b9 src/mem/ruby/common/Consumer.cc
--- a/src/mem/ruby/common/Consumer.cc   Tue Sep 18 10:30:04 2012 -0400
+++ b/src/mem/ruby/common/Consumer.cc   Tue Sep 18 22:46:34 2012 -0500
@@ -33,24 +33,12 @@
 void
 Consumer::scheduleEvent(Time timeDelta)
 {
-    scheduleEvent(g_system_ptr, timeDelta);
-}
-
-void
-Consumer::scheduleEvent(EventManager *em, Time timeDelta)
-{
-    scheduleEventAbsolute(em, timeDelta + g_system_ptr->getTime());
+    scheduleEventAbsolute(timeDelta + g_system_ptr->getTime());
 }
 
 void
 Consumer::scheduleEventAbsolute(Time timeAbs)
 {
-    scheduleEventAbsolute(g_system_ptr, timeAbs);
-}
-
-void
-Consumer::scheduleEventAbsolute(EventManager *em, Time timeAbs)
-{
     Tick evt_time = g_system_ptr->clockPeriod() * timeAbs;
     if (!alreadyScheduled(evt_time)) {
         // This wakeup is not redundant
diff -r 65f927bda74d -r 33eb3c8a98b9 src/mem/ruby/common/Consumer.hh
--- a/src/mem/ruby/common/Consumer.hh   Tue Sep 18 10:30:04 2012 -0400
+++ b/src/mem/ruby/common/Consumer.hh   Tue Sep 18 22:46:34 2012 -0500
@@ -44,8 +44,8 @@
 class Consumer
 {
   public:
-    Consumer()
-        : m_last_scheduled_wakeup(0), m_last_wakeup(0)
+    Consumer(EventManager *_em)
+        : m_last_scheduled_wakeup(0), m_last_wakeup(0), em(_em)
     {
     }
 
@@ -88,8 +88,6 @@
         m_scheduled_wakeups.erase(time);
     }
 
-    void scheduleEvent(EventManager* em, Time timeDelta);
-    void scheduleEventAbsolute(EventManager* em, Time timeAbs);
     void scheduleEvent(Time timeDelta);
     void scheduleEventAbsolute(Time timeAbs);
 
@@ -97,6 +95,7 @@
     Tick m_last_scheduled_wakeup;
     std::set<Tick> m_scheduled_wakeups;
     Tick m_last_wakeup;
+    EventManager *em;
 
     class ConsumerEvent : public Event
     {
diff -r 65f927bda74d -r 33eb3c8a98b9 
src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.cc Tue Sep 18 
10:30:04 2012 -0400
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/InputUnit_d.cc Tue Sep 18 
22:46:34 2012 -0500
@@ -35,7 +35,7 @@
 using namespace std;
 using m5::stl_helpers::deletePointers;
 
-InputUnit_d::InputUnit_d(int id, Router_d *router)
+InputUnit_d::InputUnit_d(int id, Router_d *router) : Consumer(router)
 {
     m_id = id;
     m_router = router;
diff -r 65f927bda74d -r 33eb3c8a98b9 
src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc  Tue Sep 
18 10:30:04 2012 -0400
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/NetworkInterface_d.cc  Tue Sep 
18 22:46:34 2012 -0500
@@ -44,6 +44,7 @@
 
 NetworkInterface_d::NetworkInterface_d(int id, int virtual_networks,
                                        GarnetNetwork_d *network_ptr)
+    : Consumer(network_ptr)
 {
     m_id = id;
     m_net_ptr = network_ptr;
diff -r 65f927bda74d -r 33eb3c8a98b9 
src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.cc       Tue Sep 
18 10:30:04 2012 -0400
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.cc       Tue Sep 
18 22:46:34 2012 -0500
@@ -32,7 +32,7 @@
 #include "mem/ruby/network/garnet/fixed-pipeline/NetworkLink_d.hh"
 
 NetworkLink_d::NetworkLink_d(const Params *p)
-    : SimObject(p)
+    : SimObject(p), Consumer(this)
 {
     m_latency = p->link_latency;
     channel_width = p->channel_width;
diff -r 65f927bda74d -r 33eb3c8a98b9 
src/mem/ruby/network/garnet/fixed-pipeline/OutputUnit_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/OutputUnit_d.cc        Tue Sep 
18 10:30:04 2012 -0400
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/OutputUnit_d.cc        Tue Sep 
18 22:46:34 2012 -0500
@@ -36,6 +36,7 @@
 using m5::stl_helpers::deletePointers;
 
 OutputUnit_d::OutputUnit_d(int id, Router_d *router)
+    : Consumer(router)
 {
     m_id = id;
     m_router = router;
diff -r 65f927bda74d -r 33eb3c8a98b9 
src/mem/ruby/network/garnet/fixed-pipeline/SWallocator_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/SWallocator_d.cc       Tue Sep 
18 10:30:04 2012 -0400
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/SWallocator_d.cc       Tue Sep 
18 22:46:34 2012 -0500
@@ -35,6 +35,7 @@
 #include "mem/ruby/network/garnet/fixed-pipeline/SWallocator_d.hh"
 
 SWallocator_d::SWallocator_d(Router_d *router)
+    : Consumer(router)
 {
     m_router = router;
     m_num_vcs = m_router->get_num_vcs();
diff -r 65f927bda74d -r 33eb3c8a98b9 
src/mem/ruby/network/garnet/fixed-pipeline/Switch_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/Switch_d.cc    Tue Sep 18 
10:30:04 2012 -0400
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/Switch_d.cc    Tue Sep 18 
22:46:34 2012 -0500
@@ -37,6 +37,7 @@
 using m5::stl_helpers::deletePointers;
 
 Switch_d::Switch_d(Router_d *router)
+    : Consumer(router)
 {
     m_router = router;
     m_num_vcs = m_router->get_num_vcs();
diff -r 65f927bda74d -r 33eb3c8a98b9 
src/mem/ruby/network/garnet/fixed-pipeline/VCallocator_d.cc
--- a/src/mem/ruby/network/garnet/fixed-pipeline/VCallocator_d.cc       Tue Sep 
18 10:30:04 2012 -0400
+++ b/src/mem/ruby/network/garnet/fixed-pipeline/VCallocator_d.cc       Tue Sep 
18 22:46:34 2012 -0500
@@ -35,6 +35,7 @@
 #include "mem/ruby/network/garnet/fixed-pipeline/VCallocator_d.hh"
 
 VCallocator_d::VCallocator_d(Router_d *router)
+    : Consumer(router)
 {
     m_router = router;
     m_num_vcs = m_router->get_num_vcs();
diff -r 65f927bda74d -r 33eb3c8a98b9 
src/mem/ruby/network/garnet/flexible-pipeline/FlexibleConsumer.hh
--- a/src/mem/ruby/network/garnet/flexible-pipeline/FlexibleConsumer.hh Tue Sep 
18 10:30:04 2012 -0400
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/FlexibleConsumer.hh Tue Sep 
18 22:46:34 2012 -0500
@@ -38,6 +38,7 @@
 class FlexibleConsumer : public Consumer
 {
   public:
+    FlexibleConsumer(EventManager *em) : Consumer(em) {}
     virtual bool isBufferNotFull(int vc, int inport) { return true; }
     virtual void grant_vc(int out_port, int vc, Time grant_time) {}
     virtual void release_vc(int out_port, int vc, Time release_time) {}
diff -r 65f927bda74d -r 33eb3c8a98b9 
src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc
--- a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc Tue Sep 
18 10:30:04 2012 -0400
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkInterface.cc Tue Sep 
18 22:46:34 2012 -0500
@@ -44,6 +44,7 @@
 
 NetworkInterface::NetworkInterface(int id, int virtual_networks,
                                    GarnetNetwork *network_ptr)
+    : FlexibleConsumer(network_ptr)
 {
     m_id = id;
     m_net_ptr = network_ptr;
diff -r 65f927bda74d -r 33eb3c8a98b9 
src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.cc
--- a/src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.cc      Tue Sep 
18 10:30:04 2012 -0400
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/NetworkLink.cc      Tue Sep 
18 22:46:34 2012 -0500
@@ -32,7 +32,7 @@
 #include "mem/ruby/network/garnet/flexible-pipeline/NetworkLink.hh"
 
 NetworkLink::NetworkLink(const Params *p)
-    : SimObject(p)
+    : SimObject(p), FlexibleConsumer(this)
 {
     linkBuffer = new flitBuffer();
     m_in_port = 0;
@@ -140,7 +140,7 @@
     flit *t_flit = link_srcQueue->getTopFlit();
     t_flit->set_time(g_system_ptr->getTime() + m_latency);
     linkBuffer->insert(t_flit);
-    link_consumer->scheduleEvent(this, m_latency);
+    link_consumer->scheduleEvent(m_latency);
     m_link_utilized++;
     m_vc_load[t_flit->get_vc()]++;
 }
diff -r 65f927bda74d -r 33eb3c8a98b9 
src/mem/ruby/network/garnet/flexible-pipeline/Router.cc
--- a/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc   Tue Sep 18 
10:30:04 2012 -0400
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc   Tue Sep 18 
22:46:34 2012 -0500
@@ -41,7 +41,7 @@
 using m5::stl_helpers::deletePointers;
 
 Router::Router(const Params *p)
-    : BasicRouter(p)
+    : BasicRouter(p), FlexibleConsumer(this)
 {
     m_id = p->router_id;
     m_virtual_networks = p->virt_nets;
diff -r 65f927bda74d -r 33eb3c8a98b9 
src/mem/ruby/network/garnet/flexible-pipeline/VCarbiter.cc
--- a/src/mem/ruby/network/garnet/flexible-pipeline/VCarbiter.cc        Tue Sep 
18 10:30:04 2012 -0400
+++ b/src/mem/ruby/network/garnet/flexible-pipeline/VCarbiter.cc        Tue Sep 
18 22:46:34 2012 -0500
@@ -32,6 +32,7 @@
 #include "mem/ruby/network/garnet/flexible-pipeline/VCarbiter.hh"
 
 VCarbiter::VCarbiter(Router *router)
+    : Consumer(router)
 {
     m_router = router;
 }
diff -r 65f927bda74d -r 33eb3c8a98b9 
src/mem/ruby/network/simple/PerfectSwitch.cc
--- a/src/mem/ruby/network/simple/PerfectSwitch.cc      Tue Sep 18 10:30:04 
2012 -0400
+++ b/src/mem/ruby/network/simple/PerfectSwitch.cc      Tue Sep 18 22:46:34 
2012 -0500
@@ -49,6 +49,7 @@
 }
 
 PerfectSwitch::PerfectSwitch(SwitchID sid, SimpleNetwork* network_ptr)
+    : Consumer(network_ptr)
 {
     m_virtual_networks = network_ptr->getNumberOfVirtualNetworks();
     m_switch_id = sid;
diff -r 65f927bda74d -r 33eb3c8a98b9 src/mem/ruby/network/simple/Switch.cc
--- a/src/mem/ruby/network/simple/Switch.cc     Tue Sep 18 10:30:04 2012 -0400
+++ b/src/mem/ruby/network/simple/Switch.cc     Tue Sep 18 22:46:34 2012 -0500
@@ -74,7 +74,8 @@
 
     // Create a throttle
     throttle_ptr = new Throttle(m_switch_id, m_throttles.size(), link_latency,
-                                bw_multiplier, 
net_ptr->getEndpointBandwidth());
+                                bw_multiplier, net_ptr->getEndpointBandwidth(),
+                                net_ptr);
     m_throttles.push_back(throttle_ptr);
 
     // Create one buffer per vnet (these are intermediaryQueues)
@@ -214,4 +215,3 @@
     // FIXME printing
     out << "[Switch]";
 }
-
diff -r 65f927bda74d -r 33eb3c8a98b9 src/mem/ruby/network/simple/Switch.hh
--- a/src/mem/ruby/network/simple/Switch.hh     Tue Sep 18 10:30:04 2012 -0400
+++ b/src/mem/ruby/network/simple/Switch.hh     Tue Sep 18 22:46:34 2012 -0500
@@ -42,8 +42,6 @@
 #include <iostream>
 #include <vector>
 
-#include "mem/ruby/common/Global.hh"
-
 class MessageBuffer;
 class PerfectSwitch;
 class NetDest;
diff -r 65f927bda74d -r 33eb3c8a98b9 src/mem/ruby/network/simple/Throttle.cc
--- a/src/mem/ruby/network/simple/Throttle.cc   Tue Sep 18 10:30:04 2012 -0400
+++ b/src/mem/ruby/network/simple/Throttle.cc   Tue Sep 18 22:46:34 2012 -0500
@@ -49,14 +49,18 @@
 static int network_message_to_size(NetworkMessage* net_msg_ptr);
 
 Throttle::Throttle(int sID, NodeID node, int link_latency,
-                   int link_bandwidth_multiplier, int endpoint_bandwidth)
+                   int link_bandwidth_multiplier, int endpoint_bandwidth,
+                   EventManager *em)
+    : Consumer(em)
 {
     init(node, link_latency, link_bandwidth_multiplier, endpoint_bandwidth);
     m_sID = sID;
 }
 
 Throttle::Throttle(NodeID node, int link_latency,
-                   int link_bandwidth_multiplier, int endpoint_bandwidth)
+                   int link_bandwidth_multiplier, int endpoint_bandwidth,
+                   EventManager *em)
+    : Consumer(em)
 {
     init(node, link_latency, link_bandwidth_multiplier, endpoint_bandwidth);
     m_sID = 0;
diff -r 65f927bda74d -r 33eb3c8a98b9 src/mem/ruby/network/simple/Throttle.hh
--- a/src/mem/ruby/network/simple/Throttle.hh   Tue Sep 18 10:30:04 2012 -0400
+++ b/src/mem/ruby/network/simple/Throttle.hh   Tue Sep 18 22:46:34 2012 -0500
@@ -53,9 +53,10 @@
 {
   public:
     Throttle(int sID, NodeID node, int link_latency,
-             int link_bandwidth_multiplier, int endpoint_bandwidth);
+             int link_bandwidth_multiplier, int endpoint_bandwidth,
+             EventManager *em);
     Throttle(NodeID node, int link_latency, int link_bandwidth_multiplier,
-             int endpoint_bandwidth);
+             int endpoint_bandwidth, EventManager *em);
     ~Throttle() {}
 
     std::string name()
diff -r 65f927bda74d -r 33eb3c8a98b9 
src/mem/ruby/slicc_interface/AbstractController.cc
--- a/src/mem/ruby/slicc_interface/AbstractController.cc        Tue Sep 18 
10:30:04 2012 -0400
+++ b/src/mem/ruby/slicc_interface/AbstractController.cc        Tue Sep 18 
22:46:34 2012 -0500
@@ -29,7 +29,8 @@
 #include "mem/ruby/slicc_interface/AbstractController.hh"
 #include "mem/ruby/system/System.hh"
 
-AbstractController::AbstractController(const Params *p) : SimObject(p)
+AbstractController::AbstractController(const Params *p)
+    : SimObject(p), Consumer(this)
 {
   p->ruby_system->registerAbstractController(this);
 }
diff -r 65f927bda74d -r 33eb3c8a98b9 src/mem/ruby/system/AbstractMemOrCache.hh
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to