对于MIPS体系结构,使用标准的5级流水线并假设某些指令相互依赖,如何将流水线气泡插入到以下汇编代码中?
I1: lw $1, 0($0)
I2: lw $2, 4($0)
I3: add $3, $1, $2 ; I1 & I2 -> I3
I4: sw $3, 12($0) ; I3 -> I4
I5: lw $4, 8($0)
I6: add $5, $1, $4 ; I1 & I5 -> I6
I7: sw $5, 16($0) ; I6 -> I7
首先,我们插入一个气泡,我们
I1: IF ID EX MEM WB
I2: IF ID EX MEM
I3: IF ID --
I4: IF ID
如您所见,当I3停顿时,I4可以继续进行解码。是不是 下一个,
I1: IF ID EX MEM WB
I2: IF ID EX MEM WB
I3: IF ID -- EX MEM WB
I4: IF ID -- -- EX MEM WB
I5: IF ID EX MEM WB
I6: IF ID -- EX MEM WB
I7: IF ID -- -- EX MEM WB
我认为这可以通过MIPS的标准管道实现,但是有人说,每当插入气泡时,整个管道就会停滞。如何解决?
在上一个问题中,您正在使用Patterson的书,所以让我借用其中的一张图:
这里重要的一点是危险检测单元,它会引起气泡。如果您阅读了随附的文字,则知道执行该操作的方法是
这意味着您的流水线图不可能那样发生。每个周期都不会有新的指令输入。还应考虑到,如果您使用的是不同的代码,则可以安排发生硬件危险,如Jester所述。因此,这显然很糟糕,解决方案使IF停滞不前。
将会发生以下情况:
I1: IF ID EX MEM WB
I2: IF ID EX MEM WB
I3: IF ID -- -- --
I3: IF ID -- -- --
I3: IF ID EX MEM WB
I4: IF ID -- -- --
ETC。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句