GEM5不再支持这种Garnet Network Model
。更新后的模型是Garent 2.0。Garnet是gem5内部一个详细的互连网络模型。详情可在ISPASS 2009论文中找到。
如果您对Garnet Network Model
的使用有助于发表论文,请引用以下论文:
@inproceedings{garnet,
title={GARNET: A detailed on-chip network model inside a full-system simulator},
author={Agarwal, Niket and Krishna, Tushar and Peh, Li-Shiuan and Jha, Niraj K},
booktitle={Performance Analysis of Systems and Software, 2009. ISPASS 2009. IEEE International Symposium on},
pages={33--42},
year={2009},
organization={IEEE}
}
Garnet
由两个管道模型(pipeline models)组成:详细的固定管道模型(a detailed fixed-pipeline model)和近似的柔性管道模型(an approximate flexible-pipeline model)。
(1)fixed-pipeline model
:固定管道模型用于低层互连网络评估,并使用基于信用的流量控制对5级虚拟通道路由器的详细微观结构特征进行建模。有兴趣研究不同网络微体系结构的研究人员可以很容易地修改建模的微体系结构和流水线。此外,对于与详细网络特性无关的系统级评估,此模型提供了准确的网络模型,应作为默认模型使用。
(2)flexible-pipeline model
:柔性管道模型旨在提供所有互连网络模型的合理抽象,同时允许灵活地调整路由器管道深度。路由器管道可能从一个周期到几个周期不等。对于希望轻松更改路由器管道深度的评估,灵活的管道模型提供了一个可以使用的简洁抽象。
相关的文件:
src/mem/ruby/network/Network.py
src/mem/ruby/network/garnet/BaseGarnetNetwork.py
src/mem/ruby/network/garnet/fixed-pipeline
src/mem/ruby/network/garnet/GarnetNetwork_d.py
src/mem/ruby/network/garnet/flexible-pipeline
src/mem/ruby/network/garnet/flexible-pipeline/GarnetNetwork.py
Garnet Networks可以通过在命令行上分别添加 --garnet-network=fixed
或--garnet-network=flexible
来启用。
(1)
Garnet使用network.py中的通用网络参数:
number_of_virtual_networks
:这是虚拟网络的最大数目。活动虚拟网络的实际数量由协议决定。
control_msg_size
:控制消息的大小(字节)。默认值为8。Network.cc中的m_data_msg_size设置为以字节为单位的块大小+control_msg_size。
(2)
其他参数在garnet/BaseGarnetNetwork.py
中指定:
ni_flit_size
:flit size(字节)。Flits是信息从一个路由器发送到另一个路由器的粒度。默认值为16(=>128位)。[此默认值16导致控制消息适合1个flit,数据消息适合5个flit]。Garnet要求ni_flit_size与带宽因子(在network/BasicLink.py中)相同,因为它不模拟网络中的可变带宽。
vcs_per_vnet
:每个虚拟网络的虚拟通道数(VC)。默认值为4。
(3)
garnet/fixed-pipeline/GarnetNetwork_d.py中的以下参数仅对固定管道有效:
buffers_per_data_vc
:数据消息类中每个VC的flit缓冲区数。由于数据消息占用5个flit,因此该值可以介于1-5之间。默认值为4。
buffers_per_ctrl_vc
:控制消息类中每个VC的flit缓冲区数。由于控制消息占用1个flit,并且VC一次只能保存一个消息,因此该值必须为1。默认值为1。
(4)
garnet/flexible-pipeline/GarnetNetwork.py中的以下参数仅对flexible-pipeline有效:
buffer_size
:每个VC的缓冲区大小。值为0表示无限缓冲。
number_of_pipe_stages
:柔性管道模型中每个路由器中的管道阶段数。默认值为4。
(5)
附加功能:
路由
:目前,garnet只使用前面描述的路由表对确定性路由进行建模。
可变链路带宽建模
:带宽因数将链路带宽指定为每个网络链路每周期的字节数。 ni_flit_size必须与此值相同。低带宽的链路可以通过在拓扑文件中指定较长的延迟来建模(如前所述)。
多播消息
:所建模的网络在网络中没有硬件多播支持。多播消息在网络接口处被分解为多个单播消息。
Garnet fixed-pipeline network模拟了一个经典的5级虚拟通道路由器。五个阶段是:
(1)
缓冲区写入(BW)+路由计算(RC):传入flit得到缓冲并计算其输出端口。
(2)
VC分配(VA):所有缓冲的传单分配给下一个路由器上的VCs。[分配以可分离的方式进行:首先,每个输入VC选择一个输出VC,选择输入仲裁器,并对其发出请求。然后,每个输出VC通过输出仲裁器来中断冲突]。有序虚拟网络中的所有仲裁器都在排队以保持点到点的顺序。所有其他仲裁人都是循环赛。
(3)
交换机分配(SA):所有缓冲的flit尝试为下一个周期保留交换机端口。[分配以可分离的方式进行:首先,每个输入使用输入仲裁器选择一个输入VC,该仲裁器放置一个开关请求。然后,每个输出端口通过输出仲裁器中断冲突]。有序虚拟网络中的所有仲裁器都在排队以保持点到点的顺序。所有其他仲裁人都是循环赛。
(4)
开关穿越(ST):赢得SA穿越横杆开关的flit。
(5)
链路遍历(LT):从横杆遍历链路飞到下一个路由器。
当需要不同于5个阶段(5个阶段包括链路遍历阶段)的路由器管道时,应使用The garnet flexible-pipeline model
。路由器的所有组件(缓冲区、VC和交换机分配器、交换机等)的建模与固定管道设计相似,但管道深度没有建模,而是作为管道阶段的输入参数。流控制是通过在发送之前监视每个输出端口上缓冲区的可用性来实现的。
GEM5教程–gem5开始之旅(一)
GEM5教程–gem5开始之旅(二)
GEM5教程–修改和拓展gem5(一)
GEM5教程–修改和拓展gem5(二)
GEM5教程–修改和拓展gem5(三)
GEM5教程–修改和拓展gem5(四)
GEM5教程-互联网络
GEM5教程-Garnet