对于以下代码段,我需要插入最少数量的 nop 来解决所有潜在的管道危险。
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
但是,我不太确定上面的答案,所以任何人都可以帮助我吗?
对于以下代码段,我需要插入最少数量的 nop 来解决所有潜在的管道危险。
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
但是,我不太确定上面的答案,所以任何人都可以帮助我吗?
似乎这里唯一需要考虑的是确保在下一个周期命中$t2
之前获得正确的值 ($t2 + 1) 。beq
答案实际上取决于将值写$t2
回内存或缓存需要多少个周期-您已经省略了该细节,但假设您只有一个 3 阶段管道并且每个操作需要 1 个周期,我相信即使一个 NOP 可以工作:
lw
进入管道addi
beq
比较 和 的值,$t3
从$t2
上一个周期开始可用无法说您的实现是否支持这种类型的转发。安全的赌注是两个 NOP,但是您遗漏了很多细节,而且我还没有足够的代表发表评论以进行澄清:(希望这会有所帮助。