summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mem/ruby/network/Network.cc2
-rw-r--r--src/mem/ruby/network/Network.hh2
-rw-r--r--src/mem/ruby/network/garnet/BaseGarnetNetwork.hh3
-rw-r--r--src/mem/ruby/network/garnet/fixed-pipeline/GarnetNetwork_d.cc4
-rw-r--r--src/mem/ruby/network/garnet/fixed-pipeline/SWallocator_d.cc15
-rw-r--r--src/mem/ruby/network/garnet/fixed-pipeline/VCallocator_d.cc4
-rw-r--r--src/mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.cc1
-rw-r--r--src/mem/ruby/network/garnet/flexible-pipeline/Router.cc39
-rw-r--r--src/mem/ruby/network/garnet/flexible-pipeline/Router.hh3
-rw-r--r--src/mem/ruby/network/simple/SimpleNetwork.cc1
-rw-r--r--src/mem/ruby/network/simple/SimpleNetwork.hh3
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,