From 25cd13dbf1d6f7d306b40c7e2e3d7231b0c5eb04 Mon Sep 17 00:00:00 2001 From: Nilay Vaish Date: Sat, 12 Sep 2015 16:16:03 -0500 Subject: [PATCH] ruby: simple network: store Switch* in PerfectSwitch and Throttle There are two reasons for doing so: a. provide a source of clock to PerfectSwitch. A follow on patch removes sender and receiver pointers from MessageBuffer means that the object owning the buffer should have some way of providing timing info. b. schedule events. A follow on patch removes the consumer class. So the PerfectSwitch needs some EventManager object to schedule events on its own. --- src/mem/ruby/network/simple/PerfectSwitch.cc | 3 +-- src/mem/ruby/network/simple/PerfectSwitch.hh | 3 ++- src/mem/ruby/network/simple/Throttle.cc | 26 ++++---------------- src/mem/ruby/network/simple/Throttle.hh | 12 ++++----- 4 files changed, 14 insertions(+), 30 deletions(-) diff --git a/src/mem/ruby/network/simple/PerfectSwitch.cc b/src/mem/ruby/network/simple/PerfectSwitch.cc index de038d211..84ead6e26 100644 --- a/src/mem/ruby/network/simple/PerfectSwitch.cc +++ b/src/mem/ruby/network/simple/PerfectSwitch.cc @@ -49,9 +49,8 @@ operator<(const LinkOrder& l1, const LinkOrder& l2) } PerfectSwitch::PerfectSwitch(SwitchID sid, Switch *sw, uint32_t virt_nets) - : Consumer(sw) + : Consumer(sw), m_switch_id(sid), m_switch(sw) { - m_switch_id = sid; m_round_robin_start = 0; m_wakeups_wo_switch = 0; m_virtual_networks = virt_nets; diff --git a/src/mem/ruby/network/simple/PerfectSwitch.hh b/src/mem/ruby/network/simple/PerfectSwitch.hh index f55281d54..dddbdc9ba 100644 --- a/src/mem/ruby/network/simple/PerfectSwitch.hh +++ b/src/mem/ruby/network/simple/PerfectSwitch.hh @@ -86,7 +86,8 @@ class PerfectSwitch : public Consumer void operateVnet(int vnet); - SwitchID m_switch_id; + const SwitchID m_switch_id; + Switch * const m_switch; // vector of queues from the components std::vector > m_in; diff --git a/src/mem/ruby/network/simple/Throttle.cc b/src/mem/ruby/network/simple/Throttle.cc index 785e09aa2..c97531e58 100644 --- a/src/mem/ruby/network/simple/Throttle.cc +++ b/src/mem/ruby/network/simple/Throttle.cc @@ -31,6 +31,7 @@ #include "base/cast.hh" #include "base/cprintf.hh" #include "debug/RubyNetwork.hh" +#include "mem/ruby/network/simple/Switch.hh" #include "mem/ruby/network/simple/Throttle.hh" #include "mem/ruby/network/MessageBuffer.hh" #include "mem/ruby/network/Network.hh" @@ -48,27 +49,10 @@ static int network_message_to_size(Message* net_msg_ptr); Throttle::Throttle(int sID, RubySystem *rs, NodeID node, Cycles link_latency, int link_bandwidth_multiplier, int endpoint_bandwidth, - ClockedObject *em) - : Consumer(em), m_ruby_system(rs) + Switch *em) + : Consumer(em), m_switch_id(sID), m_switch(em), m_node(node), + m_ruby_system(rs) { - init(node, link_latency, link_bandwidth_multiplier, endpoint_bandwidth); - m_sID = sID; -} - -Throttle::Throttle(RubySystem *rs, NodeID node, Cycles link_latency, - int link_bandwidth_multiplier, int endpoint_bandwidth, - ClockedObject *em) - : Consumer(em), m_ruby_system(rs) -{ - init(node, link_latency, link_bandwidth_multiplier, endpoint_bandwidth); - m_sID = 0; -} - -void -Throttle::init(NodeID node, Cycles link_latency, - int link_bandwidth_multiplier, int endpoint_bandwidth) -{ - m_node = node; m_vnets = 0; assert(link_bandwidth_multiplier > 0); @@ -98,7 +82,7 @@ Throttle::addLinks(const vector& in_vec, // Set consumer and description in_ptr->setConsumer(this); - string desc = "[Queue to Throttle " + to_string(m_sID) + " " + + string desc = "[Queue to Throttle " + to_string(m_switch_id) + " " + to_string(m_node) + "]"; } } diff --git a/src/mem/ruby/network/simple/Throttle.hh b/src/mem/ruby/network/simple/Throttle.hh index 85bf9691a..405593bb1 100644 --- a/src/mem/ruby/network/simple/Throttle.hh +++ b/src/mem/ruby/network/simple/Throttle.hh @@ -47,20 +47,18 @@ #include "mem/ruby/system/System.hh" class MessageBuffer; +class Switch; class Throttle : public Consumer { public: 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); + Switch *em); ~Throttle() {} std::string name() - { return csprintf("Throttle-%i", m_sID); } + { return csprintf("Throttle-%i", m_switch_id); } void addLinks(const std::vector& in_vec, const std::vector& out_vec); @@ -97,8 +95,10 @@ class Throttle : public Consumer unsigned int m_vnets; std::vector m_units_remaining; - int m_sID; + const int m_switch_id; + Switch *m_switch; NodeID m_node; + int m_link_bandwidth_multiplier; Cycles m_link_latency; int m_wakeups_wo_switch; -- 2.30.2