版权声明:转载必须保留原出处,没有书面许可不可用于商用目的, https://blog.csdn.net/qq_43401808/article/details/85706041
Execution Core
Intel Core微架构的执行核是超标量的,且可以乱序处理指令。注意:这里没有使用乱序执行指令,用的是乱序处理指令。“处理”在这里包括对指令的寄存器重命名,重排序以及派发,到最后执行。当某个依赖链导致机器不得不等待某个资源时(例如等待某个二级缓存中的数据),执行核可以执行其他指令。这种乱序机制可以增加处理器的整体每周期执行指令数(IPC)。
执行核包含以下三个主要的部件:
- 重命名器(renamer) – 将微指令从前端移到执行核中。指令中使用的x86架构寄存器名称将会被重命名为更大数目的微架构寄存器名称。重命名机制可以消除被称为“读后读冲突”以及“读后写冲突”类型的寄存器假依赖。
注1:读后读冲突,寄存器假依赖,通过重命名消除。
MOV eax, 3 ADD ebx, eax
MOV eax, 5 ADD ecx, eax
|
MOV reg0, 3 ADD ebx, reg0
MOV reg1, 5 ADD ecx, reg1 |
注2:写后读冲突,寄存器假依赖,TODO:如何消除
MOV eax, [a] ; read ADD ebx, eax ; write |
?? |
- 重排序缓冲区(ROB) – 保存处于不同执行阶段的微指令,缓存已经完成的微指令,按程序设计顺序更新处理器架构状态,管理处理器产生的异常的顺序。ROB有96个条目可以管理进行中的指令(instructions in flight)。
- 预约站(RS) – 将微指令排队,等待其所需要的源操作数以及执行资源都可用,将可以投入执行的微指令调度分发到可用的执行单元执行。预约站有32个条目。
乱序执行核的前几个阶段(指执行核中的流水线的前几级)将微指令从前端移到ROB和RS中。在这个过程中,执行下列几个步骤:
- 为微指令分配资源,例如分配load缓冲区或store缓冲区
- (根据微指令的类型)将微指令绑定到对应的发射口
- 重命名微指令的源操作数与目的操作数,准备乱序执行
- 准备好微指令需要的数据(或者来自于立即数,或者来自于寄存器)。注:来自内存的数据在微指令层面上,需要通过load/store微指令获取。
下面列出了常见的不同类型的操作以及执行核是如何高效的执行这些操作:
- 单周期延迟的微操作(即微指令) – 大多数的单周期微指令可以由多个执行单元执行,允许多条依赖操作流快速执行。Todo:什么是依赖操作流 – stream of dependent operation?
- 高延迟的常用微指令 – 这样的微指令使用流水线化的执行单元,多条微指令可以处于流水线中的不同阶段上,达到同时执行的效果,以提升吞吐量
- 延迟依赖数据的操作 – 某些操作,例如除法,的延迟具有数据依赖性。整型除法操作只根据操作数的有效部分分析操作数并执行计算,因此可以通过将除数设为比较小的整数来加速常用的情况。
- 符合某些条件限制的操作数,做浮点操作时具有固定的延迟 – 对于不符合条件限制的操作数,被认为是例外情况,执行时具有高延迟与低吞吐量。这些例外情况(低吞吐量)并不影响符合条件的常规浮点操作的延迟和吞吐量。
- 内存操作延迟的延迟可变,即使是一级缓存命中的情况下 – 读操作,如果存储转发不安全,则必须等待直到某个存储地址(store-address)才能开始执行。访存排序缓冲区MOB接收并处理所有的访存操作。