我想在下面的代码中找到消除的危险,直到时钟周期7,并有适当的原因和解决方案。
1: sub $2,$2,$3
2: lw $4, 0($2)
3: and $1,$4,$2
4: beq $1,$2,1
5: or $5,$1,$6
6: add $2,$5,$3照我的想法
line2: Ex hazard (solution is forwarding)
line3: Ex hazard , mem hazard (solution is forwarding and add one bubble)
line5: Condition hazard
line6: Ex hazard (forwarding)我想解决这个问题..。
发布于 2022-04-23 16:45:51
你基本上是对的。
让我们进一步讨论:指令#3有两个危险,$4和$2都是先前指令的原始依赖项。虽然插入气泡以覆盖MEM危险延迟指令#3,但它仍然会读取$2的一个陈旧值,这样其他延迟就没用了:它也需要为该寄存器进行转发。
您已经错过了指令4中$1的EX危险。
指令5在$1上也存在原始危险,这将需要转发,因为指令5的ID阶段(假设分支未被接收)与指令3的MEM阶段重叠,这不足以避免原始依赖项中陈旧值的危险。
https://stackoverflow.com/questions/71981509
复制相似问题