Tiago Mück has uploaded this change for review. (
https://gem5-review.googlesource.com/c/public/gem5/+/41861 )
Change subject: mem-ruby: int/ext SimpleNetwork routing latency
......................................................................
mem-ruby: int/ext SimpleNetwork routing latency
One now may specify separate routing latencies for internal and
external links using the router's int_routing_latency and
ext_routing_latency, respectively.
JIRA: https://gem5.atlassian.net/browse/GEM5-920
Change-Id: I5532668bf23fc61d02b978bfd9479023a6ce2b16
Signed-off-by: Tiago Mück <[email protected]>
---
M src/mem/ruby/network/simple/PerfectSwitch.cc
M src/mem/ruby/network/simple/PerfectSwitch.hh
M src/mem/ruby/network/simple/SimpleNetwork.cc
M src/mem/ruby/network/simple/SimpleNetwork.py
M src/mem/ruby/network/simple/Switch.cc
M src/mem/ruby/network/simple/Switch.hh
6 files changed, 26 insertions(+), 8 deletions(-)
diff --git a/src/mem/ruby/network/simple/PerfectSwitch.cc
b/src/mem/ruby/network/simple/PerfectSwitch.cc
index 63203bd..201d091 100644
--- a/src/mem/ruby/network/simple/PerfectSwitch.cc
+++ b/src/mem/ruby/network/simple/PerfectSwitch.cc
@@ -90,6 +90,7 @@
PerfectSwitch::addOutPort(const std::vector<MessageBuffer*>& out,
const NetDest& routing_table_entry,
const PortDirection &dst_inport,
+ Tick routing_latency,
int link_weight)
{
// Add to routing unit
@@ -99,6 +100,7 @@
dst_inport,
link_weight);
m_out.push_back(out);
+ m_out_latencies.push_back(routing_latency);
}
PerfectSwitch::~PerfectSwitch()
@@ -220,7 +222,7 @@
incoming, vnet, outgoing, vnet);
m_out[outgoing][vnet]->enqueue(msg_ptr, current_time,
- m_switch->latencyTicks());
+ m_out_latencies[outgoing]);
}
}
}
diff --git a/src/mem/ruby/network/simple/PerfectSwitch.hh
b/src/mem/ruby/network/simple/PerfectSwitch.hh
index fe32c7f..d4f35e3 100644
--- a/src/mem/ruby/network/simple/PerfectSwitch.hh
+++ b/src/mem/ruby/network/simple/PerfectSwitch.hh
@@ -75,6 +75,7 @@
void addOutPort(const std::vector<MessageBuffer*>& out,
const NetDest& routing_table_entry,
const PortDirection &dst_inport,
+ Tick routing_latency,
int link_weight);
int getInLinks() const { return m_in.size(); }
@@ -102,6 +103,9 @@
std::vector<std::vector<MessageBuffer*> > m_in;
std::vector<std::vector<MessageBuffer*> > m_out;
+ // latency for routing to each out port
+ std::vector<Tick> m_out_latencies;
+
uint32_t m_virtual_networks;
int m_wakeups_wo_switch;
diff --git a/src/mem/ruby/network/simple/SimpleNetwork.cc
b/src/mem/ruby/network/simple/SimpleNetwork.cc
index c5da257..97164f8 100644
--- a/src/mem/ruby/network/simple/SimpleNetwork.cc
+++ b/src/mem/ruby/network/simple/SimpleNetwork.cc
@@ -117,7 +117,7 @@
m_switches[src]->addOutPort(m_fromNetQueues[local_dest],
routing_table_entry[0],
simple_link->m_latency, 0,
- simple_link->m_bw_multiplier);
+ simple_link->m_bw_multiplier, true);
}
// From an endpoint node to a switch
@@ -145,6 +145,7 @@
simple_link->m_latency,
simple_link->m_weight,
simple_link->m_bw_multiplier,
+ false,
dst_inport);
// Maitain a global list of buffers (used for functional accesses only)
m_int_link_buffers.insert(m_int_link_buffers.end(),
diff --git a/src/mem/ruby/network/simple/SimpleNetwork.py
b/src/mem/ruby/network/simple/SimpleNetwork.py
index 3bea9e2..fbb5c8d 100644
--- a/src/mem/ruby/network/simple/SimpleNetwork.py
+++ b/src/mem/ruby/network/simple/SimpleNetwork.py
@@ -99,6 +99,11 @@
virt_nets = Param.Int(Parent.number_of_virtual_networks,
"number of virtual networks")
+ int_routing_latency = Param.Cycles(BasicRouter.latency,
+ "Routing latency to internal links")
+ ext_routing_latency = Param.Cycles(BasicRouter.latency,
+ "Routing latency to external links")
+
# Internal port buffers used between the PerfectSwitch and
# Throttle objects. There is one buffer per virtual network
# and per output port.
diff --git a/src/mem/ruby/network/simple/Switch.cc
b/src/mem/ruby/network/simple/Switch.cc
index 224f8bc..2b7ac2f 100644
--- a/src/mem/ruby/network/simple/Switch.cc
+++ b/src/mem/ruby/network/simple/Switch.cc
@@ -52,7 +52,9 @@
Switch::Switch(const Params &p)
: BasicRouter(p),
- perfectSwitch(m_id, this, p.virt_nets), m_latency(p.latency),
+ perfectSwitch(m_id, this, p.virt_nets),
+ m_int_routing_latency(p.int_routing_latency),
+ m_ext_routing_latency(p.ext_routing_latency),
m_routing_unit(*p.routing_unit), m_num_connected_buffers(0),
switchStats(this)
{
@@ -81,6 +83,7 @@
const NetDest& routing_table_entry,
Cycles link_latency, int link_weight,
int bw_multiplier,
+ bool is_external,
PortDirection dst_inport)
{
const std::vector<int> &physical_vnets_channels =
@@ -116,9 +119,11 @@
intermediateBuffers.push_back(buffer_ptr);
}
+ Tick routing_latency = is_external ?
cyclesToTicks(m_ext_routing_latency) :
+
cyclesToTicks(m_int_routing_latency);
// Hook the queues to the PerfectSwitch
perfectSwitch.addOutPort(intermediateBuffers, routing_table_entry,
- dst_inport, link_weight);
+ dst_inport, routing_latency, link_weight);
// Hook the queues to the Throttle
throttles.back().addLinks(intermediateBuffers, out);
diff --git a/src/mem/ruby/network/simple/Switch.hh
b/src/mem/ruby/network/simple/Switch.hh
index 50a9eac..7a7878c 100644
--- a/src/mem/ruby/network/simple/Switch.hh
+++ b/src/mem/ruby/network/simple/Switch.hh
@@ -87,6 +87,7 @@
void addOutPort(const std::vector<MessageBuffer*>& out,
const NetDest& routing_table_entry,
Cycles link_latency, int link_weight, int
bw_multiplier,
+ bool is_external,
PortDirection dst_inport = "");
void resetStats();
@@ -102,9 +103,8 @@
bool functionalRead(Packet *, WriteMask&);
uint32_t functionalWrite(Packet *);
- Cycles latency() const { return m_latency; }
-
- Tick latencyTicks() const { return cyclesToTicks(m_latency); }
+ Cycles intRoutingLatency() const { return m_int_routing_latency; }
+ Cycles extRoutingLatency() const { return m_ext_routing_latency; }
BaseRoutingUnit& getRoutingUnit() { return m_routing_unit; }
@@ -117,7 +117,8 @@
SimpleNetwork* m_network_ptr;
std::list<Throttle> throttles;
- const Cycles m_latency;
+ const Cycles m_int_routing_latency;
+ const Cycles m_ext_routing_latency;
BaseRoutingUnit &m_routing_unit;
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/41861
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I5532668bf23fc61d02b978bfd9479023a6ce2b16
Gerrit-Change-Number: 41861
Gerrit-PatchSet: 1
Gerrit-Owner: Tiago Mück <[email protected]>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s