介绍
作者: Jason Lowe-Power

计算机体系结构模拟


大纲

gem5 是什么以及一些历史

我对体系结构模拟的看法

gem5 的软件架构


首先是 M5

M5 Logo


ISCA 2005 上的 M5

M5 slide from ISCA tutorial height:500px


然后是 GEMS

M5 和 GEMS 的 Logo


ISCA 2005 上的 GEMS

GEMS slide from ISCA tutorial height:500px


现在,我们有两个模拟器…

M5 和 GEMS 的 Logo


gem5 是什么?

密歇根 m5 + 威斯康星 GEMS = gem5

“gem5 模拟器是一个用于计算机系统体系结构研究的模块化平台,涵盖系统级体系结构以及处理器微体系结构。”

gem5 的引用

Lowe-Power et al. The gem5 Simulator: Version 20.0+. ArXiv Preprint ArXiv:2007.03152, 2021. https://doi.org/10.48550/arXiv.2007.03152

Nathan Binkert, Bradford Beckmann, Gabriel Black, Steven K. Reinhardt, Ali Saidi, Arkaprava Basu, Joel Hestness, Derek R. Hower, Tushar Krishna, Somayeh Sardashti, Rathijit Sen, Korey Sewell, Muhammad Shoaib, Nilay Vaish, Mark D. Hill, and David A. Wood. 2011. The gem5 simulator. SIGARCH Comput. Archit. News 39, 2 (August 2011), 1-7. DOI=http://dx.doi.org/10.1145/2024716.2024718


gem5-20+:计算机体系结构模拟的新时代

gem5-20+


gem5 的目标

计算机体系结构栈 height:500px

bg right agile hardware methodology fit


gem5 的目标

任何人(包括非体系结构专家)都可以下载并使用 gem5

用于跨栈研究:

我们很接近了……只是还有很多粗糙的边缘!您可以提供帮助!


gem5 社区

数百名贡献者和数千名(?)用户

旨在满足以下需求

行为准则(参见仓库)

我们希望看到社区成长!

一群工蜂改进底层计算机硬件的社区 bg right


我对模拟的看法


计算机系统研究和科学方法 bg left:60% fit

来自 Lieven Eeckhout 的 Computer Architecture Performance Evaluation Methods

高亮块是计算机体系结构模拟的适用位置


为什么需要模拟?


为什么需要模拟?(答案)


周期级模拟的替代方案:分析建模

阿姆达尔定律

\[S_{latency}(s) = \frac{1}{(1-p) + \frac{p}{s}}\]

排队论

排队论 bg auto



\[L = \lambda W\]

模拟的类型


模拟的类型:详细信息


模拟的类型:执行驱动和全系统

执行驱动

全系统

“全系统”模拟器通常结合了功能模拟和执行驱动模拟


术语(虚拟机)

您的系统和虚拟化系统的层次 bg right:45% 90%


术语(gem5)

您的系统和虚拟化系统的层次 bg right:45% 90%


术语(更多 gem5)

您的系统和虚拟化系统的层次 bg right:45% 90%


模拟类型的权衡

来自《计算机体系结构性能评估方法》的表格


我们应该在什么级别进行模拟?

“周期级”与”周期精确”


RTL 模拟


周期级模拟


gem5 的软件架构


软件架构

模型、标准库和模拟控制的图表


gem5 架构:SimObject

模型

这是 src/ 中的 C++ 代码

参数

src/ 中的 Python 代码 在 SimObject 声明文件中

实例或配置

参数的具体选择 在标准库、您的扩展或 Python 运行脚本中


模型与参数

来自 wikichip 的 Sunny Cove 架构图片 bg right fit


一些术语

您可以扩展模型以建模新事物

在这种情况下,您应该在 C++ 中从对象_继承_

class O3CPU : public BaseCPU
{

您可以特化模型以使用特定参数进行建模

在这种情况下,您应该在 Python 中从对象_继承_

class i7CPU(O3CPU):
    issue_width = 10

gem5 架构:模拟

gem5 是一个离散事件模拟器

在每个时间步,gem5:

  1. 队首的事件被出队
  2. 执行该事件
  3. 调度新事件

离散事件模拟示例 bg right:55% fit


gem5 架构:模拟

gem5 是一个离散事件模拟器

在每个时间步,gem5:

  1. 队首的事件被出队
  2. 执行该事件
  3. 调度新事件

离散事件模拟示例 bg right:55% fit


gem5 架构:模拟

gem5 是一个离散事件模拟器

在每个时间步,gem5:

  1. 队首的事件被出队
  2. 执行该事件
  3. 调度新事件

所有 SimObject 都可以将事件入队到事件队列中

离散事件模拟示例 bg right:55% fit


离散事件模拟示例

离散事件模拟示例 fit


离散事件模拟示例

离散事件模拟示例 fit


离散事件模拟示例

离散事件模拟示例 fit

要建模需要时间的事物,请在将来调度_下一个_事件(当前事件的延迟)。 可以调用函数而不是调度事件,但它们发生在_同一个 tick_中。


离散事件模拟

“时间”需要一个单位。 在 gem5 中,我们使用一个称为 “Tick” 的单位。

需要将模拟 “tick” 转换为用户可理解的时间 例如,秒。

这是全局模拟 tick 速率。 通常是每个 tick 1 ps 或每秒 $10^{12}$ 个 tick


gem5 的主要抽象:内存

内存请求

CPU 通过端口与缓存通信


gem5 的主要抽象:CPU

ISA 与 CPU 模型

ISA-CPU 交互以及 CPU 通过端口与缓存通信