diff options
Diffstat (limited to 'src/mem/ruby/network')
11 files changed, 20 insertions, 57 deletions
diff --git a/src/mem/ruby/network/Network.cc b/src/mem/ruby/network/Network.cc index 2d611cd7e..5d0ff980c 100644 --- a/src/mem/ruby/network/Network.cc +++ b/src/mem/ruby/network/Network.cc @@ -57,11 +57,9 @@ Network::Network(const Params *p) // Queues that are feeding the protocol m_fromNetQueues.resize(m_nodes); - m_in_use.resize(m_virtual_networks); m_ordered.resize(m_virtual_networks); for (int i = 0; i < m_virtual_networks; i++) { - m_in_use[i] = false; m_ordered[i] = false; } diff --git a/src/mem/ruby/network/Network.hh b/src/mem/ruby/network/Network.hh index 24a487d25..26221521f 100644 --- a/src/mem/ruby/network/Network.hh +++ b/src/mem/ruby/network/Network.hh @@ -114,8 +114,6 @@ class Network : public ClockedObject // vector of queues from the components std::vector<std::vector<MessageBuffer*> > m_toNetQueues; std::vector<std::vector<MessageBuffer*> > m_fromNetQueues; - - std::vector<bool> m_in_use; std::vector<bool> m_ordered; private: diff --git a/src/mem/ruby/network/garnet/BaseGarnetNetwork.hh b/src/mem/ruby/network/garnet/BaseGarnetNetwork.hh index c959536f5..e2c843e10 100644 --- a/src/mem/ruby/network/garnet/BaseGarnetNetwork.hh +++ b/src/mem/ruby/network/garnet/BaseGarnetNetwork.hh @@ -74,8 +74,7 @@ class BaseGarnetNetwork : public Network void setFromNetQueue(NodeID id, bool ordered, int network_num, std::string vnet_type, MessageBuffer *b); - bool isVNetOrdered(int vnet) { return m_ordered[vnet]; } - bool validVirtualNetwork(int vnet) { return m_in_use[vnet]; } + bool isVNetOrdered(int vnet) const { return m_ordered[vnet]; } virtual void checkNetworkAllocation(NodeID id, bool ordered, int network_num, std::string vnet_type) = 0; diff --git a/src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc b/src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc index 5aa967e8f..196ebb089 100644 --- a/src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc +++ b/src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc @@ -189,8 +189,7 @@ GarnetNetwork_d::makeInternalLink(SwitchID src, SwitchID dest, BasicLink* link, void GarnetNetwork_d::checkNetworkAllocation(NodeID id, bool ordered, - int network_num, - string vnet_type) + int network_num, string vnet_type) { assert(id < m_nodes); assert(network_num < m_virtual_networks); @@ -198,7 +197,6 @@ GarnetNetwork_d::checkNetworkAllocation(NodeID id, bool ordered, if (ordered) { m_ordered[network_num] = true; } - m_in_use[network_num] = true; if (vnet_type == "response") m_vnet_type[network_num] = DATA_VNET_; // carries data (and ctrl) packets diff --git a/src/mem/ruby/network/garnet/fixed-pipeline/SWallocator_d.cc b/src/mem/ruby/network/garnet/fixed-pipeline/SWallocator_d.cc index 1e636b589..06afee845 100644 --- a/src/mem/ruby/network/garnet/fixed-pipeline/SWallocator_d.cc +++ b/src/mem/ruby/network/garnet/fixed-pipeline/SWallocator_d.cc @@ -95,14 +95,9 @@ SWallocator_d::arbitrate_inports() // Select next round robin vc candidate within valid vnet int next_round_robin_invc = invc; - do { - next_round_robin_invc++; - - if (next_round_robin_invc >= m_num_vcs) - next_round_robin_invc = 0; - } while (!((m_router->get_net_ptr())->validVirtualNetwork( - get_vnet(next_round_robin_invc)))); - + next_round_robin_invc++; + if (next_round_robin_invc >= m_num_vcs) + next_round_robin_invc = 0; m_round_robin_inport[inport] = next_round_robin_invc; for (int invc_iter = 0; invc_iter < m_num_vcs; invc_iter++) { @@ -110,10 +105,6 @@ SWallocator_d::arbitrate_inports() if (invc >= m_num_vcs) invc = 0; - if (!((m_router->get_net_ptr())->validVirtualNetwork( - get_vnet(invc)))) - continue; - if (m_input_unit[inport]->need_stage(invc, ACTIVE_, SA_, m_router->curCycle()) && m_input_unit[inport]->has_credits(invc)) { diff --git a/src/mem/ruby/network/garnet/fixed-pipeline/VCallocator_d.cc b/src/mem/ruby/network/garnet/fixed-pipeline/VCallocator_d.cc index a7430b06e..d389f07ba 100644 --- a/src/mem/ruby/network/garnet/fixed-pipeline/VCallocator_d.cc +++ b/src/mem/ruby/network/garnet/fixed-pipeline/VCallocator_d.cc @@ -180,10 +180,6 @@ VCallocator_d::arbitrate_invcs() { for (int inport_iter = 0; inport_iter < m_num_inports; inport_iter++) { for (int invc_iter = 0; invc_iter < m_num_vcs; invc_iter++) { - if (!((m_router->get_net_ptr())->validVirtualNetwork( - get_vnet(invc_iter)))) - continue; - if (m_input_unit[inport_iter]->need_stage(invc_iter, VC_AB_, VA_, m_router->curCycle())) { if (!is_invc_candidate(inport_iter, invc_iter)) diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.cc b/src/mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.cc index 7a304be28..87418b6b1 100644 --- a/src/mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.cc +++ b/src/mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.cc @@ -153,7 +153,6 @@ GarnetNetwork::checkNetworkAllocation(NodeID id, bool ordered, if (ordered) { m_ordered[network_num] = true; } - m_in_use[network_num] = true; } /* diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc b/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc index ef985058e..9451439c9 100644 --- a/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc +++ b/src/mem/ruby/network/garnet/flexible-pipeline/Router.cc @@ -157,27 +157,13 @@ Router::vc_arbitrate() if (inport >= m_in_link.size()) inport = 0; int invc = m_round_robin_invc[inport]; - - int next_round_robin_invc = invc; - do { - next_round_robin_invc++; - - if (next_round_robin_invc >= m_num_vcs) - next_round_robin_invc = 0; - - } while (!(m_net_ptr->validVirtualNetwork( - get_vnet(next_round_robin_invc)))); - - m_round_robin_invc[inport] = next_round_robin_invc; + m_round_robin_invc[inport] = get_next_round_robin_vc(invc); for (int vc_iter = 0; vc_iter < m_num_vcs; vc_iter++) { invc++; if (invc >= m_num_vcs) invc = 0; - if (!(m_net_ptr->validVirtualNetwork(get_vnet(invc)))) - continue; - InVcState *in_vc_state = m_in_vc_state[inport][invc]; if (in_vc_state->isInState(VC_AB_, curCycle())) { @@ -335,17 +321,7 @@ Router::scheduleOutputLinks() { for (int port = 0; port < m_out_link.size(); port++) { int vc_tolookat = m_vc_round_robin[port]; - - int next_round_robin_vc_tolookat = vc_tolookat; - do { - next_round_robin_vc_tolookat++; - - if (next_round_robin_vc_tolookat == m_num_vcs) - next_round_robin_vc_tolookat = 0; - } while (!(m_net_ptr->validVirtualNetwork( - get_vnet(next_round_robin_vc_tolookat)))); - - m_vc_round_robin[port] = next_round_robin_vc_tolookat; + m_vc_round_robin[port] = get_next_round_robin_vc(vc_tolookat); for (int i = 0; i < m_num_vcs; i++) { vc_tolookat++; @@ -374,13 +350,22 @@ Router::scheduleOutputLinks() } int -Router::get_vnet(int vc) +Router::get_vnet(int vc) const { int vnet = vc/m_vc_per_vnet; assert(vnet < m_virtual_networks); return vnet; } +int +Router::get_next_round_robin_vc(int vc) const +{ + vc++; + if (vc == m_num_vcs) + vc = 0; + return vc; +} + void Router::checkReschedule() { diff --git a/src/mem/ruby/network/garnet/flexible-pipeline/Router.hh b/src/mem/ruby/network/garnet/flexible-pipeline/Router.hh index e3f193045..11a860b11 100644 --- a/src/mem/ruby/network/garnet/flexible-pipeline/Router.hh +++ b/src/mem/ruby/network/garnet/flexible-pipeline/Router.hh @@ -65,7 +65,6 @@ class Router : public BasicRouter, public FlexibleConsumer void grant_vc(int out_port, int vc, Cycles grant_time); void release_vc(int out_port, int vc, Cycles release_time); void vc_arbitrate(); - int get_vnet(int vc); void print(std::ostream& out) const; @@ -104,6 +103,8 @@ class Router : public BasicRouter, public FlexibleConsumer void checkReschedule(); void check_arbiter_reschedule(); void scheduleOutputLinks(); + int get_vnet(int vc) const; + int get_next_round_robin_vc(int vc) const; }; #endif // __MEM_RUBY_NETWORK_GARNET_FLEXIBLE_PIPELINE_ROUTER_HH__ diff --git a/src/mem/ruby/network/simple/SimpleNetwork.cc b/src/mem/ruby/network/simple/SimpleNetwork.cc index 5b7d7ebad..eb3bec256 100644 --- a/src/mem/ruby/network/simple/SimpleNetwork.cc +++ b/src/mem/ruby/network/simple/SimpleNetwork.cc @@ -148,7 +148,6 @@ SimpleNetwork::checkNetworkAllocation(NodeID id, bool ordered, int network_num) if (ordered) { m_ordered[network_num] = true; } - m_in_use[network_num] = true; } void diff --git a/src/mem/ruby/network/simple/SimpleNetwork.hh b/src/mem/ruby/network/simple/SimpleNetwork.hh index fe0c1838b..2d9b48dea 100644 --- a/src/mem/ruby/network/simple/SimpleNetwork.hh +++ b/src/mem/ruby/network/simple/SimpleNetwork.hh @@ -62,8 +62,7 @@ class SimpleNetwork : public Network void setFromNetQueue(NodeID id, bool ordered, int network_num, std::string vnet_type, MessageBuffer *b); - bool isVNetOrdered(int vnet) { return m_ordered[vnet]; } - bool validVirtualNetwork(int vnet) { return m_in_use[vnet]; } + bool isVNetOrdered(int vnet) const { return m_ordered[vnet]; } // Methods used by Topology to setup the network void makeOutLink(SwitchID src, NodeID dest, BasicLink* link, |