authors: Jason Lowe-Power

互连网络

此处描述了 gem5 ruby 内存系统内部互连网络模型的各个组件。

如何调用网络

简单网络 (Simple Network):

./build/<ISA>/gem5.debug \
                      configs/example/ruby_random_test.py \
                      --num-cpus=16  \
                      --num-dirs=16  \
                      --network=simple
                      --topology=Mesh_XY  \
                      --mesh-rows=4

默认网络是 simple,默认拓扑是 crossbar。

Garnet 网络:

./build/<ISA>/gem5.debug \
                      configs/example/ruby_random_test.py  \
                      --num-cpus=16 \
                      --num-dirs=16  \
                      --network=garnet2.0 \
                      --topology=Mesh_XY \
                      --mesh-rows=4

拓扑

各种控制器之间的连接通过 python 文件指定。所有外部链路(控制器和路由器之间)都是双向的。所有内部链路(路由器之间)都是单向的——这允许每个链路上的每个方向权重来偏置路由决策。

在每个拓扑中,每个链路和每个路由器都可以独立传递一个覆盖默认值的参数(在 BasicLink.py 和 BasicRouter.py 中):

这两个参数可由路由器用于在 garnet2.0 中实现自定义路由算法

路由

基于表的路由 (默认): 基于拓扑,使用最短路径图遍历来填充每个路由器/交换机的 路由表。这是在 src/mem/ruby/network/Topology.cc 中完成的。默认路由算法是基于表的,并尝试选择链路遍历次数最少的路径。可以在拓扑文件中给链路赋予权重以模拟不同的路由算法。例如,在 Mesh_XY.py 和 MeshDirCorners_XY.py 中,Y 方向链路的权重为 2,而 X 方向链路的权重为 1,从而导致 XY 遍历。在 Mesh_westfirst.py 中,西向链路的权重为 1,所有其他链路的权重为 2。在 garnet2.0 中,路由算法在权重相等的链路之间随机选择。在简单网络中,它在权重相等的链路之间静态选择。

自定义路由算法: 在 garnet2.0 中,我们提供了额外的支持来实现自定义(包括自适应)路由算法(参见 src/mem/ruby/network/garnet2.0/RoutingUnit.cc 中的 outportComputeXY())。链路的 src_outport 和 dst_inport 字段可用于为每个链路赋予自定义名称(例如,如果是网格,则为方向),这些可以在 garnet 内部用于实现任何路由算法。可以通过设置 –routing-algorithm=2 从命令行选择自定义路由算法。参见 configs/network/Network.py 和 src/mem/ruby/network/garnet2.0/GarnetNetwork.py

流控制和路由器微架构

Ruby 支持两种网络模型,Simple 和 Garnet,它们分别权衡详细建模与模拟速度。

简单网络

Ruby 中的默认网络模型是简单网络。

配置

简单网络使用 Network.py 中的通用网络参数:

其他参数在 simple/SimpleNetwork.py 中指定:

交换机模型

简单网络模拟逐跳网络遍历,但抽象出交换机内的详细建模。交换机在 simple/PerfectSwitch.cc 中建模,而链路在 simple/Throttle.cc 中建模。流控制是通过在发送之前监视输出链路中的可用缓冲区和可用带宽来实现的。

Simple_network.jpg

Garnet2.0

新 (2016) Garnet2.0 网络的详细信息在 这里

使用合成流量运行网络

互连网络可以以独立方式运行并馈送合成流量。我们建议使用 garnet2.0 执行此操作。

使用合成流量运行 Garnet Standalone