CPU如何重新排序指令

Fai*_*lde 5 cpu assembly multithreading

我最近读到了关于CPU指令重新排序的效率.但我无法理解CPU如何重新调整其指令.我的意思是编译时重新排序是可以想象的,因为编译器可以预见即将到来的代码.但对于一个接一个地读取指令的CPU,它如何看待即将重新排序的指令

Dav*_*rtz 6

指令按顺序解码,但它们随后进入“进行中”指令的集合。如果满足它们的依赖关系,指令可以向前推进。

例如,假设指令是:

  1. 从内存中加载寄存器 A。
  2. 从内存加载寄存器 B。
  3. 增量寄存器 A。
  4. 增量寄存器 B.

可能是最后两条指令同时进行,如果寄存器 B 的内存读取首先完成(可能它已经在 L1 缓存中),那么寄存器 B 的增量将在寄存器增量之前发生A.(当然,在该指令被解码之后。)


chi*_*ill 6

指令以程序顺序提取到指令队列中; 从队列中解码并移动到保留站.这些保留站有效地进行重新排序:当它们的参数变得可用时,指令被分派用于执行到执行单元,并且所有参数变得可用的时间通常不对应于指令队列/存储器中的顺序.

例如,使用Tomasulo算法,请参阅以下两个视频:

问题(和注册重命名):https: //youtu.be/I2qMY0XvYHA?list = PLAwxTw4SYaPkNw98-MFodLzKgi6bYGjZs

调度/重新排序:https://youtu.be/bEB7sZTP8zc? list = PLAwxTw4SYaPkNw98 -MFodLzKgi6bYGjZs