数据危害和提示插入

问题描述

请考虑以下代码序列,该代码序列在不支持停顿且仅支持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,$2
I22: nop
I3: sw $6,-16($5)
I44: nop
I45: nop
I5: sw $5,$5

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)