Tiago Mück has uploaded this change for review. (
https://gem5-review.googlesource.com/c/public/gem5/+/41863 )
Change subject: mem-ruby: fine tunning SimpleNetwork buffers
......................................................................
mem-ruby: fine tunning SimpleNetwork buffers
If physical_vnets_channels is set we adjust the link buffer sizes and
the max_dequeue_rate in order to achieve the expected maximum throughput
assuming a fully pipelined link, i.e., throughput of 1 msg per cycle
per channel (assuming the channels width matches the protocol
logical message size, otherwise maximum throughput may be smaller).
JIRA: https://gem5.atlassian.net/browse/GEM5-920
Change-Id: Id99ab745ed54686d8ffcc630d622fb07ac0fc352
Signed-off-by: Tiago Mück <[email protected]>
---
M src/mem/ruby/network/simple/SimpleLink.py
M src/mem/ruby/network/simple/SimpleNetwork.py
2 files changed, 28 insertions(+), 14 deletions(-)
diff --git a/src/mem/ruby/network/simple/SimpleLink.py
b/src/mem/ruby/network/simple/SimpleLink.py
index 3d66375..5f31f4a 100644
--- a/src/mem/ruby/network/simple/SimpleLink.py
+++ b/src/mem/ruby/network/simple/SimpleLink.py
@@ -61,12 +61,25 @@
if hasattr(self, 'buffers') > 0:
fatal("User should not manually set links' \
in_buffers or out_buffers")
- # Note that all SimpleNetwork MessageBuffers are currently ordered
# The network needs number_of_virtual_networks buffers per
# in and out port
buffers = []
for i in range(int(network.number_of_virtual_networks)):
- buffers.append(MessageBuffer(ordered = True,
- buffer_size =
network.vnet_buffer_size(i)))
+ buffers.append(MessageBuffer(ordered = True))
+
+ # If physical_vnets_channels is set we adjust the buffer sizes and
+ # the max_dequeue_rate in order to achieve the expected thoughput
+ # assuming a fully pipelined link, i.e., throughput of 1 msg per
cycle
+ # per channel (assuming the channels width matches the protocol
+ # logical message size, otherwise maximum thoughput may be
smaller).
+ if len(network.physical_vnets_channels) != 0:
+ assert(len(network.physical_vnets_channels) == \
+ int(network.number_of_virtual_networks))
+ for i in range(int(network.number_of_virtual_networks)):
+ buffers[i].buffer_size = \
+ network.physical_vnets_channels[i] * (self.latency + 1)
+ buffers[i].max_dequeue_rate = \
+ network.physical_vnets_channels[i]
+
self.buffers = buffers
diff --git a/src/mem/ruby/network/simple/SimpleNetwork.py
b/src/mem/ruby/network/simple/SimpleNetwork.py
index fbb5c8d..c11deaa 100644
--- a/src/mem/ruby/network/simple/SimpleNetwork.py
+++ b/src/mem/ruby/network/simple/SimpleNetwork.py
@@ -63,15 +63,6 @@
physical_vnets_bandwidth = VectorParam.Int([],
"Assign a bandwidth for each vnet channel")
- # Gets the size of the message buffers associated to a vnet
- # If physical_vnets_channels is set we just multiply the size of the
- # buffers as SimpleNetwork does not actually creates multiple physical
- # channels per vnet
- def vnet_buffer_size(self, vnet):
- if len(self.physical_vnets_channels) == 0:
- return self.buffer_size
- else:
- return self.buffer_size * self.physical_vnets_channels[vnet]
def setup_buffers(self):
# Setup internal buffers for links and routers
@@ -116,6 +107,16 @@
"Routing strategy to be used")
def setup_buffers(self, network):
+ # Gets the size of the message buffers associated with a vnet
+ # If physical_vnets_channels is set we just multiply the size of
the
+ # buffers as each vnet buffer is shared between physical channels
+ def vnet_buffer_size(vnet):
+ if len(network.physical_vnets_channels) == 0:
+ return network.buffer_size
+ else:
+ return network.buffer_size * \
+ network.physical_vnets_channels[vnet]
+
if hasattr(self, 'port_buffers') > 0:
fatal("User should not manually set routers' port_buffers")
router_buffers = []
@@ -126,7 +127,7 @@
for i in range(int(network.number_of_virtual_networks)):
router_buffers.append(MessageBuffer(ordered = True,
allow_zero_latency = True,
- buffer_size =
network.vnet_buffer_size(i)))
+ buffer_size = vnet_buffer_size(i)))
# Add message buffers to routers for each external link connection
for link in network.ext_links:
@@ -135,6 +136,6 @@
for i in range(int(network.number_of_virtual_networks)):
router_buffers.append(MessageBuffer(ordered = True,
allow_zero_latency = True,
- buffer_size =
network.vnet_buffer_size(i)))
+ buffer_size = vnet_buffer_size(i)))
self.port_buffers = router_buffers
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/41863
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: Id99ab745ed54686d8ffcc630d622fb07ac0fc352
Gerrit-Change-Number: 41863
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