You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于MIPS代码中Line3到Line4无数据依赖的疑问(启用转发)

关于MIPS代码数据依赖的疑问解答

先把题目里的MIPS代码贴出来:

Loop: 
addi $6, $6, 4
lw $4, 0($6)
add $5, $5, $4
rol $2, $5, 1
bne $0, $5, Loop
sw $5, 0($6)
Exit:

你提到的参考答案标记的数据依赖是:

  • Line1到Line2,寄存器$6
  • Line2到Line3,寄存器$4
  • Line4到Line5和Line6,寄存器$5

你的疑问完全合理!Line3的add $5, $5, $4明明修改了寄存器$5,Line4的rol $2, $5, 1需要读取$5的内容,这两者之间确实存在RAW(写后读)数据依赖,没被参考答案列出来绝对是个疏漏,甚至参考答案里还有另一个错误:Line4的rol指令根本没有修改$5,它只修改了$2,所以Line5的bne和Line6的sw读取的$5其实来自Line3的add,应该是Line3到Line5/6的依赖,而不是Line4到它们的依赖。

那为什么会出现这种情况?大概率是出题人整理答案时的粗心。我们再理清楚所有真实存在的RAW数据依赖(启用转发机制不影响依赖的存在,只是影响是否需要流水线停顿):

  • Line1 → Line2:addi写$6,lw读取$6作为内存地址
  • Line2 → Line3:lw写$4,add读取$4进行运算
  • Line3 → Line4:add写$5,rol读取$5进行循环移位
  • Line3 → Line5:add写$5,bne读取$5判断分支条件
  • Line3 → Line6:add写$5,sw读取$5写入内存

至于转发机制的作用,只是让Line3→Line4这种依赖不需要停顿——add在执行阶段(EX)结束后产生的$5结果,会直接通过转发单元传给rol的EX阶段,不需要等到add写回寄存器堆(WB阶段),所以不会造成流水线停顿,但这并不代表依赖不存在。

内容的提问来源于stack exchange,提问作者user8848592

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:02:47