对于以下代码段,我需要插入最少数量的nops来解决所有潜在的管道危险。
lw $t3, 4($t5)
beq $t2, $t3, -2
addi $t2, $t2, 1
我提出的解决方案是
lw $t3, 4($t5)
beq $t2, $t3, -2
addi $t2, $t2, 1
NOP
NOP
但是,我不太清楚上面的答案,所以任何人都可以帮我这个?
答案 0 :(得分:0)
这里似乎唯一关注的是确保$t2
在下一个周期中beq
被击中之前获得正确的值($ t2 + 1)。答案实际上取决于将$t2
的值写回内存或缓存所需的循环次数 - 您已省略该详细信息,但假设您只有3级流水线并且每个操作都需要1我相信即使是单一的NOP也可以起作用:
lw
的值可用时,addi
进入管道beq
比较了$t3
和$t2
的值,该值在上一个周期中可用无法确定您的实现是否支持此类转发。安全的赌注是两个NOP但你遗漏了很多细节,我还没有足够的代表留下评论澄清:(希望这会有所帮助。