diff options
author | Brandon Potter <brandon.potter@amd.com> | 2015-07-10 16:05:23 -0500 |
---|---|---|
committer | Brandon Potter <brandon.potter@amd.com> | 2015-07-10 16:05:23 -0500 |
commit | c38f5098b152ea1e1dde96220d3f9e50d3411780 (patch) | |
tree | 921765f6aac17f76f5801deb2e14ea16f5ed8963 /src/mem/ruby/network/simple | |
parent | 9eda4bdc5a947883a2d55ab860d37c5cd80c3370 (diff) | |
download | gem5-c38f5098b152ea1e1dde96220d3f9e50d3411780.tar.xz |
ruby: replace g_ruby_start with per-RubySystem m_start_cycle
This patch begins the process of removing global variables from the Ruby
source with the goal of eventually allowing users to create multiple Ruby
instances in a single simulation. Currently, users cannot do so because
several global variables and static members are referenced by the RubySystem
object in a way that assumes that there will only ever be a single RubySystem.
These need to be replaced with per-RubySystem equivalents.
This specific patch replaces the global var g_ruby_start, which is used
to calculate throughput statistics for Throttles in simple networks and
links in Garnet networks, with a RubySystem instance var m_start_cycle.
Diffstat (limited to 'src/mem/ruby/network/simple')
-rw-r--r-- | src/mem/ruby/network/simple/Switch.cc | 3 | ||||
-rw-r--r-- | src/mem/ruby/network/simple/Throttle.cc | 14 | ||||
-rw-r--r-- | src/mem/ruby/network/simple/Throttle.hh | 8 |
3 files changed, 15 insertions, 10 deletions
diff --git a/src/mem/ruby/network/simple/Switch.cc b/src/mem/ruby/network/simple/Switch.cc index 416a222bb..431a7b28f 100644 --- a/src/mem/ruby/network/simple/Switch.cc +++ b/src/mem/ruby/network/simple/Switch.cc @@ -81,7 +81,8 @@ Switch::addOutPort(const vector<MessageBuffer*>& out, Cycles link_latency, int bw_multiplier) { // Create a throttle - Throttle* throttle_ptr = new Throttle(m_id, m_throttles.size(), + RubySystem *rs = m_network_ptr->params()->ruby_system; + Throttle* throttle_ptr = new Throttle(m_id, rs, m_throttles.size(), link_latency, bw_multiplier, m_network_ptr->getEndpointBandwidth(), this); diff --git a/src/mem/ruby/network/simple/Throttle.cc b/src/mem/ruby/network/simple/Throttle.cc index d722c91ea..f0cd6bd16 100644 --- a/src/mem/ruby/network/simple/Throttle.cc +++ b/src/mem/ruby/network/simple/Throttle.cc @@ -46,19 +46,19 @@ const int PRIORITY_SWITCH_LIMIT = 128; static int network_message_to_size(Message* net_msg_ptr); -Throttle::Throttle(int sID, NodeID node, Cycles link_latency, +Throttle::Throttle(int sID, RubySystem *rs, NodeID node, Cycles link_latency, int link_bandwidth_multiplier, int endpoint_bandwidth, ClockedObject *em) - : Consumer(em) + : Consumer(em), m_ruby_system(rs) { init(node, link_latency, link_bandwidth_multiplier, endpoint_bandwidth); m_sID = sID; } -Throttle::Throttle(NodeID node, Cycles link_latency, +Throttle::Throttle(RubySystem *rs, NodeID node, Cycles link_latency, int link_bandwidth_multiplier, int endpoint_bandwidth, ClockedObject *em) - : Consumer(em) + : Consumer(em), m_ruby_system(rs) { init(node, link_latency, link_bandwidth_multiplier, endpoint_bandwidth); m_sID = 0; @@ -245,8 +245,10 @@ Throttle::clearStats() void Throttle::collateStats() { - m_link_utilization = 100.0 * m_link_utilization_proxy - / (double(g_system_ptr->curCycle() - g_ruby_start)); + double time_delta = double(m_ruby_system->curCycle() - + m_ruby_system->getStartCycle()); + + m_link_utilization = 100.0 * m_link_utilization_proxy / time_delta; } void diff --git a/src/mem/ruby/network/simple/Throttle.hh b/src/mem/ruby/network/simple/Throttle.hh index 797511702..19b0fcd35 100644 --- a/src/mem/ruby/network/simple/Throttle.hh +++ b/src/mem/ruby/network/simple/Throttle.hh @@ -52,11 +52,12 @@ class MessageBuffer; class Throttle : public Consumer { public: - Throttle(int sID, NodeID node, Cycles link_latency, + Throttle(int sID, RubySystem *rs, NodeID node, Cycles link_latency, + int link_bandwidth_multiplier, int endpoint_bandwidth, + ClockedObject *em); + Throttle(RubySystem *rs, NodeID node, Cycles link_latency, int link_bandwidth_multiplier, int endpoint_bandwidth, ClockedObject *em); - Throttle(NodeID node, Cycles link_latency, int link_bandwidth_multiplier, - int endpoint_bandwidth, ClockedObject *em); ~Throttle() {} std::string name() @@ -103,6 +104,7 @@ class Throttle : public Consumer Cycles m_link_latency; int m_wakeups_wo_switch; int m_endpoint_bandwidth; + RubySystem *m_ruby_system; // Statistical variables Stats::Scalar m_link_utilization; |