gem5-22.0 已发布!
首先,感谢所有贡献者,他们使这成为又一个出色的 gem5 发布! 我们将在 与 ISCA 2022 的 gem5 研讨会 上讨论此发布以及 gem5 社区在过去几年中发生的许多其他很酷的事情。 您可以在我们的 YouTube 频道上找到直播和录制内容。
gem5 版本 22.0 略有延迟,但我们有一个非常强大的发布! 此发布有来自 48 位独特贡献者的 660 项更改。 虽然没有太多大型功能,但社区在此发布中做了大量工作来改进稳定性和添加错误修复。 也就是说,我们有一些很酷的新功能,如全系统 GPU 支持、大量 Arm 改进和改进的 HBM 模型。
请参见下面的更多详细信息!
新功能
- Arm 现在准确建模 TLBIs 和 DSBs 的 DVM 消息。这在 CHI 协议中实现。
- ArmSystem 中默认启用 EL2/EL3 支持
- 支持伪通道的 HBM 控制器
- 改进了 Ruby 的 SimpleNetwork 路由
- 添加了 x86 裸机工作负载和更好的实模式支持
- 使用多个预取器时添加了轮询仲裁
- 为 ARM GIGv3 添加了 KVM 仿真
- CHI 协议的许多改进
添加了许多 RISC-V 指令
以下 RISCV 指令已添加到 gem5 的 RISC-V ISA:
- Zba 指令:add.uw, sh1add, sh1add.uw, sh2add, sh2add.uw, sh3add, sh3add.uw, slli.uw
- Zbb 指令:andn, orn, xnor, clz, clzw, ctz, ctzw, cpop, cpopw, max, maxu, min, minu, sext.b, sext.h, zext.h, rol, rolw, ror, rori, roriw, rorw, orc.b, rev8
- Zbc 指令:clmul, clmulh, clmulr
- Zbs 指令:bclr, bclri, bext, bexti, binv, binvi, bset, bseti
- Zfh 指令:flh, fsh, fmadd.h, fmsub.h, fnmsub.h, fnmadd.h, fadd.h, fsub.h, fmul.h, fdiv.h, fsqrt.h, fsgnj.h, fsgnjn.h, fsgnjx.h, fmin.h, fmax.h, fcvt.s.h, fcvt.h.s, fcvt.d.h, fcvt.h.d, fcvt.w.h, fcvt.h.w, fcvt.wu.h, fcvt.h.wu
stdlib 自动资源下载器的改进
gem5 标准库的下载器已重新设计,以更高效地获取 resources.json 文件。
它现在被缓存,而不是在每次资源检索时检索。
resources.json 目录已移动到更永久的 URL http://resources.gem5.org/resources.json。
还添加了测试以确保资源模块继续正常工作。
gem5 in SystemC 支持改进
gem5 in SystemC 已改进以适应新的研究需求。 这些更改包括稳定性改进和错误修复。 gem5 测试套件也已扩展,包括 gem5 in SystemC 测试。
改进的 GPU 支持
用户现在可以使用 ROCm 4.2 计算堆栈在全系统模式下模拟 AMD GPU 设备。
直到 v21.2,gem5 仅在系统调用仿真模式下支持 GPU 模拟,使用 ROCm 4.0。
有关运行 GPU 全系统模拟的示例脚本,请参见 gem5-resources 中的 src/gpu-fs/README.md 和 configs/example/gpufs/ 中的示例脚本。
已添加 GPU Ruby 随机测试器 以帮助验证 CPU 和 GPU Ruby 一致性协议的正确性,作为每个 kokoro 签入的一部分。 这有助于在新更改签入之前验证协议的正确性。 目前测试器专注于与 GPU 一起使用的协议,但这些想法可以扩展到其他协议。 这项工作基于 “Autonomous Data-Race-Free GPU Testing”, IISWC 2019, Tuan Ta, Xianwei Zhang, Anthony Gutierrez, and Bradford M. Beckmann。
Arm 板已添加到 gem5 标准库
通过此更改,ARM 板 ArmBoard 已添加到 gem5 标准库。
这允许使用 gem5 stdlib 组件运行 ARM 系统。
使用此板的示例 gem5 配置脚本可以在 configs/example/gem5_library/arm-ubuntu-boot-exit.py 中找到。
createAddrRanges 现在支持 NUMA 配置
当系统配置为 NUMA 时,它有多个内存范围,每个内存范围映射到相应的 NUMA 节点。为此,此更改使 createAddrRanges 能够将地址范围映射到仅给定的 HNF。
Jira 工单:https://gem5.atlassian.net/browse/GEM5-1187。
API(面向用户的)更改
CPU 模型类型不再是简单的模型名称,而是针对每个 ISA 专门化
例如,O3CPU 现在是 X86O3CPU 和 ArmO3CPU 等。
如果您有自己的 CPU 模型,这需要进行许多更改。
有关详细信息,请参见 https://gem5-review.googlesource.com/c/public/gem5/+/52490。
此外,这需要任何从旧 CPU 类型继承的配置脚本进行更改。
在许多情况下,如果只编译了单个 ISA,旧名称仍然有效。 但是,这并非 100% 正确。
最后,CPU_MODELS 不再是 build_opts/ 中的参数。
现在,如果您想为特定 ISA 编译 CPU 模型,您必须在 arch/ 目录中为 CPU 模型添加新文件。
CPU 和 ISA API 的许多更改
如果您有任何专门的 CPU 模型或任何不在主线中的 ISA,在基于此发布进行变基时期望会有许多更改。
- 不再使用 read/setIntReg(例如,参见 https://gem5-review.googlesource.com/c/public/gem5/+/49766)
- InvalidRegClass 已更改(例如,参见 https://gem5-review.googlesource.com/c/public/gem5/+/49745)
- 所有寄存器类都已更改(例如,参见 https://gem5-review.googlesource.com/c/public/gem5/+/49764/)
initiateSpecialMemCmd重命名为initiateMemMgmtCmd以推广到 HTM 之外的其他命令(例如,DVM/TLBI)- 添加了
OperandDesc类(例如,参见 https://gem5-review.googlesource.com/c/public/gem5/+/49731) - 已删除许多
TheISA的情况
错误修复
- 修复了 RISC-V call/ret 指令解码。修复通过在 “standard.isa” 中定义新的
JumpConstructor为 RISC-V 跳转指令添加 IsReturn 和 IsCall 标志。Jira 工单:https://gem5.atlassian.net/browse/GEM5-1139。 - 修复了使用经典缓存的多时序核心中的 x86 Read-Modify-Write 行为。Jira 工单:https://gem5.atlassian.net/browse/GEM5-1105。
- 已修复 O3 LSQ 的循环缓冲区。此问题影响了使用大型工作负载运行 O3 CPU。Jira 工单:https://gem5.atlassian.net/browse/GEM5-1203。
- 移除了 RISC-V lr/sc 实现中的”内存泄漏”类错误。Jira 问题:https://gem5.atlassian.net/browse/GEM5-1170。
- 解决了 Ruby 的 memtest 问题。在 gem5 v21.2 中,如果地址范围的大小小于下游允许的最大未完成请求数,测试器会卡住尝试查找唯一地址。这已解决。
构建相关更改
- SConscript 文件中
env中的变量现在需要您使用env['CONF']来访问它们。任何出现env['<VARIABLE>']的地方现在应该是env['CONF']['<VARIABLE>'] - 内部构建文件现在位于每个目标的
gem5.build目录中 - 所有构建变量都是每个目标的,不再有任何共享变量。
其他更改
- Arm VExpress_GEM5_Foundation 平台需要新的引导加载程序。有关详细信息,请参见 https://gem5.atlassian.net/browse/GEM5-1222。
- MemCtrl 接口已更新以使用更多继承,使将其扩展到其他内存类型(例如,HBM 伪通道)更容易。