流水线与指令重排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/datadev_sh/article/details/79365060

流水线是一种指令级并行技术。

指令执行步骤

  • 取指  IF                                (从内存中取出指令)                
  • 译码和取寄存器操作数  ID    (把指令送到指令译码器进行译码,产生相应控制信号) 
  • 执行或者有效地址计算  EX    (指挥并控制CPU、内存、I/O设备的之间的数据流动)
  • 存储器访问  MEM
  • 写回  WB

汇编指令不是一步可以执行完毕的,每个步骤涉及的硬件可能不同,所以可以使用流水线技术来执行指令。

可以看到,当第2条指令执行时,第1条指令只是完成了取值操作。假如每个步骤需要1毫秒,那么如果指令2等待指令1执行完再执行,就需要等待5毫秒。而使用流水线后,只需要等待1毫秒。

A = B + C 的执行过程

LW表示load,LW R1,B,把B的值加载到R1寄存器中。ADD是加法,把R1、R2的值相加,并存放到R3中。SW表示store存储,将R3寄存器的值保存到变量A中。

在ADD指令上的大叉表示一个中断,也就是在这里停顿了一下,因为R2中的数据还没准备好。由于ADD的延迟,后面的指令都要慢一个节拍。

停顿与重排序

再看复杂一点的情况

a = b + c
d = e + f

扫描二维码关注公众号,回复: 2962707 查看本文章

可见上图中有不少停顿。为了减少停顿,我们只需要将LW Re,e和LW Rf,f移动到前面执行。

可见指令重排序对提高CPU性能十分必要,但是要遵循happens-before规则。

猜你喜欢

转载自blog.csdn.net/datadev_sh/article/details/79365060