数据危害和提示插入

时间:2020-08-21 13:16:35

标签: mips cpu-architecture

请考虑以下代码序列,该代码序列在不支持停顿且仅支持ALU-ALU转发的处理器上执行:

I1: lw $1, 40($6)
I2: add $6, $2, $2
I3: sw $6, 50($1)
I4: lw $5, -16($5)
I5: sw $5, -16($5)
I6: add $5, $5, $5

现在在此处理器上运行此代码的唯一方法是插入nops。解决方法是:

I1: lw $1, 40($6)
I2: add $6, $2, $2
I22: nop
I3: sw $6, 50($1)
I4: lw $5, -16($5)
I44: nop
I45: nop
I5: sw $5, -16($5)
I6: add $5, $5, $5

我的问题是,为什么在说明I2和I3(Alu-Store危险)之间我们仅插入了一个nop?为什么这里一个点子就足够了?根据我的理解,由于无法通过ALU-ALU转发来支持此危害,因此这对于该处理器是一个危害,这意味着添加必须首先通过WB阶段写入结果,然后SW指令从寄存器文件中读取结果,因此需要两次nop,因为在这种情况下,add指令处于WB阶段,SW处于ID阶段,并且通过转发寄存器文件,SW可以读取所需的寄存器。

0 个答案:

没有答案