微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数据危害和提示插入

如何解决数据危害和提示插入

请考虑以下代码序列,该代码序列在不支持停顿且仅支持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 举报,一经查实,本站将立刻删除。