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