下面是一段MIPS指令序列: add$t1,$s1,$s0 #R[$t1]←R[$s1]+R[$s0] sub$t2,Ss0,$s3 #R[$t2]←R[$s0]-R[$s3] add$t1,St1,$t2 #R[$t1]←R[$t1]+

admin2017-11-20  39

问题 下面是一段MIPS指令序列:
add$t1,$s1,$s0    #R[$t1]←R[$s1]+R[$s0]
sub$t2,Ss0,$s3    #R[$t2]←R[$s0]-R[$s3]
add$t1,St1,$t2    #R[$t1]←R[$t1]+R[$t2]
    假定在一个采用“取指、译码/取数、执行、访存、写回”的五段流水线处理器中执行上述指令序列,请回答下列问题:
如果采用“转发”技术,是否可以完全解决数据冒险?若不行,需要在何处,加入几条nop指令,才能使这段指令序列的执行避免数据冒险。

选项

答案采用“转发”技术,上述程序段可以完全避免数据冒险。只要把第1条指令“访存”段结束时在流水线寄存器中的$t1的值和第2条指令“执行”段结束时在流水段寄存器中的$t2的值同时“转发”到第3条指令的“执行”段内的ALU的两个输入端,这样,在ALU中运算的两个操作数都是正确的值,不会发生数据冒险,无需再插入nop指令,见表8-9。 [*]

解析
转载请注明原文地址:https://jikaoti.com/ti/DLfjFFFM
0

最新回复(0)