跳转到内容

User:AnthonyDonlon/archives/操作数转发

维基百科,自由的百科全书

操作数转发(英文:Operand forwarding),也称数据转发,是一种对流水线CPU的优化策略。 [1] [2] 若流水线CPU当前执行的指令必须等待尚未完成的指令产生的结果时,流水线中将产生数据冒险,这需要引入流水线停顿解决。操作数转发可降低此时流水线停顿带来的时间开销。

实例

假设一个带有五级流水线的 CPU 将执行以下两条伪汇编指令,其中第二条指令的原操作数 A 是第一条指令的计算结果:

ADD A B C  #A=B+C
SUB D C A  #D=C-A

CPU 在完成第二条指令的取指(IF)和解码(ID)步骤后,由于源操作数 A 在第一条指令中仍未被回写(WB),因此需要引入流水线停顿。直到上一指令的回写操作完成后,该指令才能被执行(EX)。

无操作数转发
1 2 3 4 5 6 7 8
ADD IF ID EX MEM WB
SUB IF ID 停顿 停顿 EX MEM WB

但是,由于操作数 A 实际上在上一指令的执行(EX)阶段(第三个时钟周期)就已经准备好了,因此可以用上一指令执行步骤的结果作为下一指令执行步骤的源操作数,提前进行第二条指令的执行步骤,从而减小流水线的开销。

带操作数转发
1 2 3 4 5 6
ADD IF ID EX MEM WB
SUB IF ID EX MEM WB

技术实现

CPU 的控制单元必须加入检测何时能够进行操作数转发的逻辑。 随后可以使用一个数据选择器来选择合适的寄存器触发器以从中读取操作数。

参考资料

  1. ^ CMSC 411 Lecture 19, Pipelining Data Forwarding. University of Maryland Baltimore County Computer Science and Electrical Engineering Department. [2020-01-22]. 
  2. ^ High performance computing, Notes of class 11. hpc.serc.iisc.ernet.in. September 2000 [2014-02-08]. (原始内容存档于2013-12-27). 

外部链接

[[Category:指令处理]]