kkk12344头像

GEM5架构解析

GEM5是性能仿真的首选工具,封装了很多外部依赖和相干工具提升仿真效率和便捷性。但是这也为定制和效率优化设置了障碍

分析GEM5的结构,对关键能力做拆解,找到核心仿真逻辑(总量近170w行,超过110w行有效代码,核心71w,其中ISA近半)

在这里插入图片描述

关键仿真框架

核心模块文件数有效代码占核心
src/arch(ISA 与译码)1,101354,95750.0%
src/mem(内存与一致性)660130,68818.4%
src/dev(设备模型)40269,1209.7%
src/cpu(CPU 模型)34458,4418.2%
src/python(配置层)25630,4264.3%
src/base(基础设施)19429,1344.1%
src/sim(事件内核)17319,6732.8%
src/gpu-compute(GPU 管线)7315,5692.2%
其余(kern、proto、sst)251,9230.3%

GEM5指令部分,自带了6组ISA指令,包括ARM(多代:SVE\SME\SME2)、AMDGPU(Vega\CDNA3)、x86-64、RISC-V、SPRAC、MIPS、POWER

功能组件

指令

执行(计算)

  • CPU 侧提供 AtomicSimple、TimingSimple、NonCachingSimple、O3、Minor 五类时序模型,外加 KVM、TraceCPU 与 Checker;分支预测覆盖 LocalBP、TournamentBP、BiModeBP、TAGE、LTAGE、TAGE-SC-L,v26 新增 ITTAGE;预取器有 Stride、Tagged、AMPM、DCPT、ISB、BOP、SMS、SBOOE、STeMS、PIF、SignaturePath、FetchDirected 等十余类。精度梯度从“一拍一指令”一直铺到乱序执行,这是 gem5 最难被替代的能力之一。

存储与一致性(经典模式与Ruby方法)

  • 多种经典存储模型与一致性方案。涵盖 DDR3/4/5、GDDR5、HBM、LPDDR2/3/5与WideIO,并且导入了DRAMsim2、DRAMsim3、DRAMSys外部模型。
  • Ruby路径采用SLICC描述一致性协议,包含11套协议,包括MI_example、MESI两级/三级、MESI三级HTM、MOESI CMP directory/token、MOESI hammer、MOESI AMD、Garnet standalone、GPU VIPER与CHI

设备层

  • 有 28 个直接继承 SimObject 的模型,覆盖 PCI/PCIe、virtio(block、net、9p、input)、8250/PL011 串口、PS/2、I2C、RTC、8254 定时器、IDE/存储、网卡、帧缓冲、DMA 与 GIC/IOAPIC 中断控制器,足以支撑 Linux 全系统启动。GPU 侧由 src/arch/amdgpu、src/gpu-compute、src/dev/amdgpu 与 GPU_VIPER 协议组成,合计约 19.0 万行;v26 的 GPUFS 可在 MI300X 上启动 ROCm 7.2/7.14,并补充了 Triton 使用的指令与矩阵操作。但代码库中没有 NVIDIA 或 Intel GPU 模型,这是硬边界。系统集成层提供 SystemC/TLM 协同仿真(119 个文件、2.4 万行有效代码),v26 新增 CHI-TLM 与 mesh 拓扑;SST 集成则保持在较小的规模

配置、统计与构建

  • 可配置性由 Python 层承载:149 个直接继承 SimObject 的类、1,426 个类定义、2,577 个 Param 声明,配合 pybind11 在运行时构建 C++ 对象图;统计框架在核心代码中约有 2,700 处注册点。构建侧使用 154 个 SConscript、28 个 Kconfig 文件与 C++20 标准,最终产出 build/ALL/gem5.opt。参数化程度高是优点,但也意味着同一份拓扑要在 Python 与 C++ 两侧维护,排障链路更长。

7 个 ISA、5 类 CPU 模型、11 套 Ruby 协议、28 个设备模型与 AMDGPU 全系统,构成了从指令到平台的完整覆盖;

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/kkk12344/article/details/170247958

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--