CPU如何重新排序指令

时间:2016-08-21 08:00:50

标签: multithreading assembly cpu

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

2 个答案:

答案 0 :(得分:5)

以程序顺序将指令提取到指令队列中;从队列中解码并移入预订站。这些保留站有效地进行重新排序:当执行单元的参数可用时,指令被分派执行单元执行,所有参数变为可用的时间通常与指令队列/内存中的顺序不对应。

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

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

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

答案 1 :(得分:4)

指令按顺序解码,但它们会进入正在进行的"正在进行的处理"说明。如果满足其依赖性,说明可以向前推进。

例如,说明说明是:

  1. 从内存中加载寄存器A.
  2. 从内存中加载寄存器B.
  3. 增加寄存器A。
  4. 增加寄存器B。
  5. 可能是最后两条指令同时进行,如果寄存器B的存储器读取先完成(可能已经在L1高速缓存中),则寄存器B的增量将在寄存器A的增量。(当然,在该指令被解码之后。)