X86 指令的执行过程和在gem5中的实现?

X86 指令的执行过程和在gem5中的实现?,x86,cpu-architecture,instructions,gem5,micro-architecture,X86,Cpu Architecture,Instructions,Gem5,Micro Architecture,我正在学习gem5上程序的运行过程。读一些书。但我仍然对程序执行中的各个部分感到困惑。我下面的理解正确吗 首先,将计算机指令放在ICache中 计算机CPU控制指令的获取,并将 已将指令提取到指令队列中。那就乘火车吧 指令队列中的指令,并对指令进行解码 进入微操作。这些微操作将发送到 重新排序缓冲区。如果重新排序缓冲区中的微操作 一个加载/存储,它将被发送到加载/存储队列。如果它是一个 加减运算,直接发送 给执行单位。在此过程中,每个执行单元都有一个 为寄存器重命名保留的站。当微操作停止时 完成

我正在学习gem5上程序的运行过程。读一些书。但我仍然对程序执行中的各个部分感到困惑。我下面的理解正确吗

  • 首先,将计算机指令放在ICache中 计算机CPU控制指令的获取,并将 已将指令提取到指令队列中。那就乘火车吧 指令队列中的指令,并对指令进行解码 进入微操作。这些微操作将发送到 重新排序缓冲区。如果重新排序缓冲区中的微操作 一个加载/存储,它将被发送到加载/存储队列。如果它是一个 加减运算,直接发送 给执行单位。在此过程中,每个执行单元都有一个 为寄存器重命名保留的站。当微操作停止时 完成后,它将返回到重新排序缓冲区。当微 操作到达重新排序缓冲区的头部时,可以将其写入 返回到CPU外部的缓存或内存
  • 加载队列将从缓存中获取数据。缓存正在运行 通常是虚拟地址索引和物理地址标记。这个 加载操作将并行地从缓存中提取并执行 虚拟地址转换。如果缓存未命中,则加载操作失败 将发送给MSHR。MSHR将提取的数据发送到内存。如果 数据在内存中,首先将数据提取到缓存中, 然后将获取的数据返回给MSHR,然后返回 到加载队列。如果数据不在存储器中,则操作系统 系统将发出页面错误,然后将获取数据 从硬盘到内存,从缓存中提取,然后 返回到MSHR,然后返回到加载队列
  • 问题:

  • 微操作是否指解码时的mov和add等操作
  • 指令问题是否涉及发送到的微操作 重新排序缓冲区或从重新排序缓冲区发送到执行 单位?指令解码后,是否直接发送到重新排序缓冲区
  • 派送和发放是否涉及同一流程
  • 我还看到了一些队列,如浮点数队列或其他队列。这是否指当指令从重新排序缓冲区发送到执行单元时,由于执行单元不足而临时存储指令的位置?这些队列是否与Tomasulo算法中的预订站引用的内容相同

  • 我想你说的是x86,因为提到了UOP(微操作)。阅读Agner Fog的Microach PDF,特别是有关Intel Core 2或Nehalem的部分,听起来与您描述的最为相似(没有uop缓存,但在解码和重命名/分配到后端之间有一个解码指令队列进行缓冲。)为那些真正的CPU进行优化涉及到大量前端解码,但是,如果细节与您正在调整的前端解码机制不匹配,您可以跳过该部分。还有中的其他链接,特别是David Kanter的writeups。术语:在英特尔术语中,“问题”=将uop从前端移动到无序后端,再移动到ROB和RS(保留站,又名调度器,您正在调用队列。因此,如果您有单独的FP和整数调度器,UOP在其中等待其输入准备就绪,并有一个免费的执行端口,那么K8/K10可能是更好的模型;Intel使用统一的调度器(直到Skylake?)“调度”=将uop从调度程序发送到执行单元。非x86计算机体系结构教科书通常使用相反的术语。它们从来都不是同义词。另请参见(re:real x86 CPU):,可能是No、
    nop
    和“消除”uop(无执行单元)进入ROB,没有RS条目,因为实际上不需要执行任何操作。所有操作都进入ROB,这使得从错误推测(如分支或异常)中恢复成为可能.See和.UOP确实需要在ROB和RS中发布执行单元问题。如果两者都已满,前端无法发布它们。但是,如果您还没有阅读Agner Fog的Microach guide对PPro和Nehalem的解释,请立即执行。为了进行比较,介绍了AMD K10使用的每个端口的单独调度程序。它在从ROB到调度程序发出的指令的rms,这可能同样不准确,或者不是一个有用的心智模型。我假设您谈论的是x86,因为提到了uops(微操作)。请阅读Agner Fog的Microach PDF,特别是关于Intel Core 2或Nehalem的部分,听起来与您描述的最为相似(没有uop缓存,但在解码和重命名/分配到后端之间有一个解码指令队列缓冲。)为那些真正的CPU进行优化涉及到对前端解码的大量关注,但如果细节与正在调整的前端解码机制不匹配,则可以跳过该部分。还有中的其他链接,特别是David Kanter的writeups。术语:在英特尔术语中,“问题”=将uop从前端移动到故障后端,再移动到ROB和RS中(保留站,又名调度器,您正在调用队列。因此,如果您有单独的FP和整数调度器,UOP在其中等待其输入准备就绪,并有一个免费的执行端口,那么K8/K10可能是更好的模型;Intel使用统一的调度器(直到Skylake?)“调度”=将uop从调度程序发送到执行单元。非x86计算机体系结构教科书通常使用相反的术语。它们从来都不是同义词。另请参见(re:real x86 CPU):,可能是No、
    nop
    和“消除”uop(无执行单元)进入ROB,没有RS条目,因为实际上不需要执行任何操作。所有操作都进入ROB,这使得从错误推测(如分支或例外)中恢复成为可能。请参阅和。确实需要执行单元的UOP