详解Gem5模拟器的4种CPU模型

背景知识

一、处理器的流水线

        流水线技术(pipeline)是一种将每条指令分解为多步,并让各步操作重叠,从而实现几条指令并行处理的技术。程序中的指令仍是一条条顺序执行,但可以预先取若干条指令,并在当前指令尚未执行完时,提前启动后续指令的另一些操作步骤。这样显然可加速一段程序的运行过程。

执行一条指令的五个过程:

1.取指:

        指令取指(Instruction Fetch)是指将指令从存储器中读取出来的过程。

2.译码:

        指令译码(Instruction Decode)是指将存储器中取出的指令进行翻译的过程。经过译码之后得到指令需要的操作数寄存器索引,可以使用此索引从通用寄存器组(Register File)中将操作数读出。

3.执行:

        指令译码之后所需要进行的计算类型都已得知,并且已经从通用寄存器组中读取出了所需的操作数,那么接下来便进行指令执行(Instruction Execute)。指令执行是指对指令进行真正运算的过程。譬如,如果指令是一条加法运算指令,则对操作数进行加法操作;如果是减法运算指令,则进行减法操作。在“执行”阶段的最常见部件为算术逻辑部件运算器(Arithmetic Logical Unit,ALU),作为实施具体运算的硬件功能单元。

4.访存:

        存储器访问指令往往是指令集中最重要的指令类型之一,访存(Memory Access)是指存储器访问指令将数据从存储器中读出,或者写入存储器的过程。

5.写回:

        写回(Write-Back)是指将指令执行的结果写回通用寄存器组的过程。如果是普通运算指令,该结果值来自于“执行”阶段计算的结果;如果是存储器读指令,该结果来自于“访存”阶段从存储器中读取出来的数据。

多条指令的流水线可以提高性能,优化时序,增加吞吐率。

“流水线”冒险

        “冒险”指的是指令并行执行带来的各种硬件资源冲突,数据的读写顺序等等问题,下面分别讲一下这几个“冒险”。

  • 结构冒险:所需的硬件正在为之前的指令工作;
  • 数据冒险:需要等待之前的指令完成数据写入;
  • 控制冒险:需要根据之前的指令决定接下来的行为;

        有一个万能的解决方案,就是执行“空泡指令”,也就是空指令,这样能使冒险的指令执行时间往后延迟。

二、Gem5模拟器

        gem5是一个开源、模块化的时钟精确的全系统模拟器,应用于计算机体系结构研究。该模拟器可以对CPU、存储系统、片上互连系统、I/O等系统组件进行详细的建模,并通过修改不同组件的具体实现和各个组件的配置参数可以灵活配置不同的计算系统

        gem5支持常见的各种指令集:X86、ARM、RISCV、SPARC、POWER、MIPS。不同的指令集包含了每条指令执行的完整过程。当前gem5中可用于全系统模拟的ISA主要有ARM、X86和RISCV;

        gem5支持4种CPU模型:Simple、In-Order、Out-of-Order(简称O3)和KVM;

每种CPU的具体实现和ISA不关联,因此CPU模型和ISA间可以任意搭配以组成多种计算机系统。


正文

GEM5支持四种不同的CPU模型:AtomicSimple,TimingSimple,In-Order,Out-Order(O3)。不同的CPU的模拟在速度和精确度之间的权衡不同。CPU四种模型可以在模型中任意切换,支持“热插拔”。四种CPU模型之所以被称为“热插拔”是因为CPUs共享通用部件和接口。

一、AtomicSimple

        最简单规模的模型,一个cycle完成一条指令的执行,memory 模型比较理想化,访存操作为原子性操作。适用于快速功能模拟。

        不使用CPU流水线技术,因而不现实,在模拟器中运行速度非常快,常用于快速启动Linux。(留疑,看的文档说的是不用)

二、In-Order

        顺序执行(In-order execution)是指指令的执行必须遵循程序中指定的顺序。在按序执行中,一旦遇到指令依赖的情况,流水线就会停滞,如果采用乱序执行,就可以跳到下一个非依赖指令并发布它。

        GEM5模拟的新特性,强调指令时序与仿真精度,流水级为默认五级流水:取值、译码、执行、访存、写回。并且模拟了cache部件、执行部件、分支预测部件等。

三、Out-of-Order(O3 for short)

        乱序执行(out-of-order execution)是指令在流水线中不在遵循程序中指定的顺序来执行,一旦某条指令的操作数准备好了,就可以将其送到FU中执行。比方Core乱序执行引擎说程序某一段有7条指令,此时CPU将根据各单元电路的空闲状态和各指令能否提前执行的具体情况分析后,将能提前执行的指令立即发送给相应电路执行。

        O3模拟器是流水级模拟,O3模拟器模拟了乱序执行和超标量执行的指令间依赖,以及运行在多CPU上的并发执行的多线程。默认7级流水:取值、译码、重命名、发射、执行、写回、提交。模拟了物理寄存器文件、IO、LSQ、ROB功能部件池等。主要参数为流水管道间延迟、硬件线程数、IQ/LSQ/ROB项数、FU延迟、物理寄存器重命名、分支预测、访存依赖预测等。

举个栗子:

LDR R1, [R0];
ADD R2, R1, R1; 
ADD R4,R3,R3;

通过分析发现第二条指令和第一条指令存在依赖关系,但是和第3条指令无关,所以可对其优化。

优化前:

优化后:
 

四、TimingSimple

        无流水线的模拟,但是使用了存储器访问时序模型,用以统计存储器访问延迟


参考链接

gem5学习笔记一:模拟器安装与使用 (qq.com)

(18条消息) Gem5 学习 1 - Gem5 及其 文件结构_小张的学习手册的博客-CSDN博客

处理器中的流水线技术 - 知乎 (zhihu.com)

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值