下面是一段MIPS指令序列: 1 add St1,$s1,$s0 #R[$t1]←R[$s1]+R[Sso] 2 Sub$t2,Ss0,Stl #R[$t2]←R[$s0]-R[$t1] 3 add$t3,$t3,$s2 #R[St

admin2017-11-20  40

问题 下面是一段MIPS指令序列:
1  add St1,$s1,$s0    #R[$t1]←R[$s1]+R[Sso]
2  Sub$t2,Ss0,Stl    #R[$t2]←R[$s0]-R[$t1]
3  add$t3,$t3,$s2    #R[St1]←R[$t1]+R[$t2]
4  1w  $t4,100($s3)    #[$t4]←M[R[$s3]+100]
    在“取指、译码/取数、执行、访存、写回”的五段流水线处理器中执行上述指令序列,请回答下列问题:
若不采取“转发”技术的话,怎样调整这些指令的顺序才能使其性能最好,这时还需在何处,加入几条nop指令才能保证调整后的这段指令序列的执行避免数据冒险。此时,CPI为多少?

选项

答案因为第3条、第4条都没有用到第2条更新的值,且第3、4条也未使用第1条指令更新的值,故可以把顺序调整为: 1 add St1,$s1,Ss0 #[$t1]←R[$si]+R[$s0] 2 add$t3,$t3,$s2 #[$t1]←R[$t1]+R[St2] 3 1w $t4,100($s3) #R[$t4]←M[R[$s3]+100] 4 sub $t2,Ss0,St1 #[$t2]←R[$s0]-R[$t1] 此时只有第1条指令把数据写回到寄存器$t1后,第4条指令才能从$t1取到正确的值。所以第1条指令的“写回”流水段后面才应该是第4条指令的“译码/取数”流水段,为此,在第3条和第4条指令之间必须插入1条nop指令,见表6-6。 [*] 采用上述方法来执行上述4条指令,则需要的时钟周期数为9,故CPI为9/4=2.5。

解析
转载请注明原文地址:https://kaotiyun.com/show/4VRi777K
0

最新回复(0)