尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

gem5 garnet 的演进,原理,实验

gem5 garnet 的演进,原理,实验 User: gem5 garnet 的演进原理实验的详细教程Kimi: # gem5 Garnet 片上网络NoC详细教程一、演进历史1.1 Garnet 的起源与发展版本年份核心特性Garnet (原始版)20095级流水线虚拟通道路由器由 Niket Agarwal 和 Tushar Krishna 开发Garnet2.020161级流水线更高可配置性支持异构 SoC 建模Garnet3.0 / HeteroGarnet2020支持非对称拓扑、更丰富的路由算法、功耗统计Garnet 是 gem5 Ruby 内存系统内部的周期精确片上网络NoC模型。与 Simple Network 相比Garnet 能精确建模竞争、路由器资源利用率和功耗统计。二、核心原理2.1 系统架构与组件Garnet 网络由以下核心组件构成 ┌─────────────────────────────────────────────────────────┐ │ GarnetNetwork │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ NI │◄──►│ Router │◄──►│ Link │ │ │ │(Network │ │ (5-stage│ │(Network/ │ │ │ │Interface)│ │ pipeline│ │ Credit) │ │ │ └────┬────┘ └─────────┘ └─────────┘ │ │ │ │ │ Cache/Directory Controller │ └─────────────────────────────────────────────────────────┘关键组件说明组件功能对应文件GarnetNetwork顶层对象实例化所有 NI、路由器和链路GarnetNetwork.py/.ccNetworkInterface连接一致性控制器与路由器将消息拆分为 flitsNetworkInterface.ccRouter5级流水线虚拟通道路由器管理仲裁和流控Router.ccNetworkLink传输 flits数据链路支持跨时钟域NetworkLink.ccCreditLink传输 VC/缓冲区 credits流控链路CreditLink.cc2.2 路由器微架构5级流水线Garnet 路由器采用经典的5级流水线虚拟通道路由器┌────────────────────────────────────────────────────────────┐ │ BW │ RC │ VA │ SA │ ST │ LT │ │ 写缓冲│路由计算│VC分配│开关分配│开关遍历│链路遍历 │ └────────────────────────────────────────────────────────────┘各阶段详细说明阶段全称功能BWBuffer Write输入 flit 被写入对应虚拟通道的缓冲区RCRoute Compute根据路由表计算输出端口由RoutingUnit完成VAVC Allocation为 HEAD/HEAD_TAIL flit 分配下游 VCSASwitch Allocation输入 VC 竞争交叉开关先输入仲裁后输出仲裁STSwitch Traversal获胜 flit 通过交叉开关LTLink Traversalflit 通过链路到达下一跳路由器默认配置下BW、RC、VA、SA、ST 均在1个周期内完成LT 在下一个周期完成。多周期路由器可通过router_latency参数配置 。2.3 流控机制虚拟通道Virtual ChannelGarnet 采用Virtual Channel Flow Control每个虚拟网络Vnet包含多个虚拟通道VC控制包默认 1-flit缓冲区深度 1数据包默认 5-flit缓冲区深度 4通过Credit-based流控传递缓冲区状态信息关键参数在GarnetNetwork.py中定义classGarnetNetwork(RubyNetwork):ni_flit_sizeParam.UInt32(16,network interface flit size in bytes)vcs_per_vnetParam.UInt32(4,virtual channels per virtual network)buffers_per_data_vcParam.UInt32(4,buffers per data virtual channel)buffers_per_ctrl_vcParam.UInt32(1,buffers per ctrl virtual channel)routing_algorithmParam.Int(0,0: Weight-based Table, 1: XY, 2: Custom)2.4 拓扑结构Garnet 利用 Ruby 内存系统的拓扑基础设施支持任意异构拓扑 。内置拓扑类型拓扑描述命令行调用Crossbar所有控制器通过简单开关连接到中央交叉开关--topologyCrossbarCrossbarGarnet每个控制器通过 Garnet 路由器连接--topologyCrossbarGarnetPt2Pt每对控制器之间直接链路--topologyPt2PtMesh_XY2D MeshXY 路由先X后Y--topologyMesh_XY --mesh-rowsNMesh_westfirst2D MeshWest-first 路由--topologyMesh_westfirstMeshDirCorners_XY2D Mesh目录放在四角--topologyMeshDirCorners_XY拓扑文件位置src/mem/ruby/network/topologies/2.5 路由算法Garnet 支持三种路由模式 基于权重的表路由默认--routing-algorithm0自动填充最短路径路由表多路径时选择权重最小的链路XY 路由--routing-algorithm12D Mesh 中先沿 X 方向再沿 Y 方向实现于RoutingUnit.cc::outportComputeXY()自定义路由--routing-algorithm2通过src_outport和dst_inport命名链路方向实现outportComputeCustom()函数三、实验指南3.1 环境编译方式 AStandalone 模式纯网络模拟无 CPUStandalone 模式用于研究 NoC 本身不涉及缓存一致性协议 # 1. 配置编译选项scons defconfig build/NULL build_opts/NULL scons setconfig build/NULLRUBY_PROTOCOL_GARNET_STANDALONEy# 2. 编译scons build/NULL/gem5.debug -j$(nproc)# 或使用旧版命令scons build/Garnet_standalone/gem5.debugPROTOCOLGarnet_standalone -j$(nproc)方式 B集成模式带 Ruby 一致性协议# 例如使用 MESI Two Level 协议scons build/X86/gem5.optPROTOCOLMESI_Two_Level -j$(nproc)3.2 运行 Synthetic Traffic 实验Standalone 模式使用合成流量生成器测试网络性能 ./build/NULL/gem5.debug configs/example/garnet_synth_traffic.py\--num-cpus64\--num-dirs64\--networkgarnet\--topologyMesh_XY\--mesh-rows8\--sim-cycles100000000\--syntheticuniform_random\--inj-vnet2\--injectionrate0.15\--router-latency1\--link-latency1\--vcs-per-vnet4\--routing-algorithm1\--sys-clock1GHz\--ruby-clock1GHz\--link-width-bits128合成流量模式--synthetic模式描述uniform_random每个节点随机选择目标节点transpose节点 (i,j) 发送到 (j,i)bit_complement按位取反确定目标shuffle循环移位neighbor发送到相邻节点tornado发送到 (iN/2)%N3.3 集成 Ruby 协议的完整系统模拟./build/X86/gem5.opt configs/example/ruby_random_test.py\--num-cpus16\--num-dirs16\--networkgarnet2.0\--topologyMesh_XY\--mesh-rows4\--vcs-per-vnet4\--router-latency2\--link-latency13.4 关键参数配置表参数说明默认值--num-cpus源节点注入节点数量---num-dirs目的节点弹出节点数量---network网络模型simple或garnet2.0simple--topology拓扑结构Crossbar--mesh-rowsMesh 行数仅 Mesh 拓扑0--router-latency路由器流水线级数≥11--link-latency链路延迟周期1--vcs-per-vnet每个虚拟网络的 VC 数4--link-width-bits链路位宽128--routing-algorithm0表路由, 1XY, 2自定义0--garnet-deadlock-threshold死锁检测阈值周期500003.5 结果分析模拟结束后在m5out/目录查看stats.txt关键指标# 网络级统计greppackets_injectedm5out/stats.txtgreppackets_receivedm5out/stats.txtgrepaverage_packet_latencym5out/stats.txtgrepaverage_packet_queueing_latencym5out/stats.txtgrepaverage_packet_network_latencym5out/stats.txt# 路由器级统计每个路由器greprouter.*flits_inm5out/stats.txtgreprouter.*flits_outm5out/stats.txt核心性能指标指标含义理想值average_packet_latency平均包延迟周期越低越好packets_injected总注入包数反映负载packets_received总接收包数应与注入匹配average_hops平均跳数与拓扑相关max_packet_latency最大包延迟检测热点/死锁3.6 批量实验脚本示例以下脚本用于扫描不同注入率下的网络饱和度 #!/bin/bash# run_sweep.sh - 注入率扫描实验TRAFFICS(uniform_randomtransposebit_complement)INJ_RATES(0.010.050.100.150.200.250.30)TOPOLOGYMesh_XYROWS8CPUS64DIRS64fortrafficin${TRAFFICS[]};doforinjin${INJ_RATES[]};dooutdirresults/${traffic}_${inj}mkdir-p$outdir./build/NULL/gem5.debug-re$outdir\configs/example/garnet_synth_traffic.py\--num-cpus$CPUS\--num-dirs$DIRS\--networkgarnet\--topology$TOPOLOGY\--mesh-rows$ROWS\--sim-cycles1000000\--synthetic$traffic\--injectionrate$inj\--vcs-per-vnet4\--routing-algorithm1\--link-width-bits128# 提取关键结果latency$(grepaverage_packet_latency$outdir/stats.txt|awk{print $2})echo$traffic,$inj,$latencysweep_results.csvdonedone四、进阶主题4.1 自定义拓扑在src/mem/ruby/network/topologies/下创建新的拓扑文件继承Topology类定义init()方法连接 routers、NI 和 links。4.2 自定义路由修改src/mem/ruby/network/garnet/RoutingUnit.cc// 在 outportComputeCustom() 中实现自定义逻辑intoutportComputeCustom(RouteInfo route,intinport,PortDirection direction){// 例如基于下游 VC 空闲状态的自适应路由intoutport-1;// ... 自定义算法 ...returnoutport;}然后使用--routing-algorithm2调用。4.3 功耗建模Garnet 可生成路由器功耗统计需配合 Orion 或 DSENT 等功耗模型库。通过--enable-power相关参数启用。五、常见问题排查问题可能原因解决方案早期拥塞Early CongestionVC 数不足、缓冲区太小增加--vcs-per-vnet或buffers_per_data_vc死锁Deadlock路由算法无死锁自由保证使用 XY 路由或增加 VC饱和吞吐量低于理论值链路宽度、路由器延迟配置检查--link-width-bits和--router-latency编译错误协议选择错误确认RUBY_PROTOCOL_GARNET_STANDALONEy参考资源Georgia Tech Garnet 页面http://synergy.ece.gatech.edu/garnetgem5 官方文档https://www.gem5.org/documentation/general_docs/ruby/garnet-2/Garnet2.0 教程幻灯片ARM Research Summit 2017详细讲解微架构和配置GitHub NoC Tutorialhttps://github.com/xinchen13/gem5-noc 提供中文实践指南AI ADDR
返回列表