gem5 101
这是一个由六部分组成的课程,将帮助您掌握 gem5 的基础知识,并说明一些常见用途。本课程基于威斯康星大学麦迪逊分校教授的特定架构课程 CS 752 和 CS 757 的作业。
重要提示: 此处指向作业部分的链接是从一个现在不存在的 wiki 翻译成 markdown 的。我们已尽最大努力保留内容的原始状态,但这些作业可能仍然:
- 已过时且与最新版本的 gem5 不兼容。
- 包含无效链接或对过时资源的引用。
我们不保证这些作业可以按照当前状态轻松完成。
gem5 的第一步,以及 Hello World!
在第一部分中,您将首先学习正确下载和构建 gem5,为简单系统创建简单的配置脚本,编写简单的 C 程序并运行 gem5 模拟。然后,您将在系统中引入两级缓存层次结构(有趣的东西)。最后,您可以查看更改系统参数(如内存类型、处理器频率和复杂性)对简单程序性能的影响。
深入了解
在第二部分中,我们使用了开箱即用的 gem5 功能。现在,我们将通过扩展模拟器功能来见证 gem5 的灵活性和实用性。我们将带您完成 x86 指令 (FSUBR) 的实现,该指令目前在 gem5 中缺失。这将向您介绍 gem5 用于描述指令集的语言,并说明指令如何解码并分解为最终由处理器执行的微操作。
流水线解决一切问题
从 ISA 开始,我们现在转向处理器微架构。第三部分介绍了 gem5 中实现的各种不同 cpu 模型,并分析了流水线实现的性能。具体来说,您将了解不同流水线阶段的延迟和带宽如何影响整体性能。此外,还免费包含 gem5 伪指令的示例用法。
始终在实验
利用指令级并行 (ILP) 是提高单线程性能的有效方法。分支预测和推断是利用 ILP 的两种常见技术。在这一部分中,我们使用 gem5 来验证避免分支的图算法比使用分支的算法性能更好的假设。这是了解如何将 gem5 纳入您的研究过程的有用练习。
冷酷、坚硬的缓存
在查看处理器核心之后,我们现在将注意力转向缓存层次结构。我们继续专注于实验,并考虑缓存设计中的权衡,例如替换策略和组关联性。此外,我们还了解了有关 gem5 模拟器的更多信息,并创建了我们的第一个 simObject!
单核太落后了
对于最后一部分,我们同时进行多核和全系统模拟!我们分析简单应用程序在获得更多计算资源(核心)时的性能。我们还在 gem5 模拟的目标系统上启动一个完全成熟的未修改操作系统 (Linux)。最重要的是,我们将教您如何创建您自己的、更简单的可怕的 fs.py 配置脚本版本,一个您可以轻松修改的版本。
完成!
恭喜,您现在熟悉了 gem5 的基础知识。您现在可以穿上 “Bro, do you even gem5?” T 恤(如果您能找到一件的话)。
致谢
多年来,许多人参与了这些课程作业的开发。如果我们遗漏了任何人,请在此处添加。
- 威斯康星大学麦迪逊分校 Multifacet 研究小组
- Mark Hill, David Wood 教授
- Jason Lowe-Power
- Nilay Vaish
- Lena Olson
- Swapnil Haria
- Jayneel Gandhi
