管道危险处理

时间:2013-12-03 21:04:42

标签: pipeline

I0: slli  $s2, $s1, 4
I1: beq   $s1, $zero, top
I2: addi  $s3, $s2, 6
I3: mult  $t2, $s3, $s1
I4: addi  $s4, $s2, 8
I5: sw    $t2, 0($s4)

考虑没有任何危险处理的管道。该流水线是典型的5级IF,ID,EX,MEM,WB MIPS设计。对于上面的代码,请完成代码的管道。为框中的每条指令插入字符IF(指令获取),ID(指令解码),EX(执行),M(存储器),WB(写回)。你们认为我的图表是否正确? 谢谢!http://imgur.com/PbJ2egd

2 个答案:

答案 0 :(得分:3)

首先让我们绘制哪些指令依赖于前面指令的输出

  • I0:这里没有任何依赖
  • I1:这里没有任何依据,但是是一个分支
  • I2:依赖I0($ s2)
  • I3:依赖I2($ s3)
  • I4:依赖I0($ s2)
  • I5:依赖I4($ s4)

因此,当一条指令依赖于另一条指令时,如I4上的I5,它的EX块在其依赖的指令完成其WB块之前无法运行。在I5的情况下,我们可以清楚地看到这一点,因为一旦I4的WB块完成,EX块仅启动

另请注意,分支会阻止下一条指令开始,直到其EX块完成为止。

根据这两条规则,我们可以逐条教学并将其绘制出来:

  • I0:没有输出。
  • I1:依赖于无输出,但请注意它是分支。在EX完成之前,下一条指令无法启动。
  • I2:依赖于I0的输出,所以等待I0的WB,也等待I1的EX,因为I1是分支。 I1的EX是更糟糕的情况,所以等到那时候。这停了两个街区。
  • I3:依赖于I2的输出,所以等待I2的WB。这个停了2个街区。 (我们现在已经停顿了4次)
  • I4:依赖于I0的输出,所以等待I0的WB。这停止了​​0个街区,因为I0很久以来就完成了。 (我们现在已经停顿了4次)
  • I5:依赖I4的输出,所以等待I4的WB。这个停了2个街区。 (我们现在已经停顿了6次)

所以最后我们停了3次,每次停两次。这相当于老师画的6“x”。

答案 1 :(得分:0)

enter image description here

这是她在昨天的审核会议上给出的正确答案。你能指出我如何回答这个问题的正确方向吗?你怎么知道什么时候推迟,把X等等?对不起,我无法详细说明答案,但只知道这是正确的答案。