0
I1:LW R1, 0(R4) ; R1 ← address (0+R4)
I2:ADDI R2, R1, #8 ; R2 ← R1+8
I3:MULT R3, R1, R1 ; R3 ← R1*R1
I4:SW R3, 4(R2) ; address(4+R2) ← R3 

在上面的 MIPS 代码中,在解决方案表中,R3 的真正依赖关系被标记为 I3->I4。据我了解,真正的依赖关系是 RAW(写后读)危害或流危害。我很确定这是一个写后写的危险,因此不是真正的依赖。我这样说对吗?

4

1 回答 1

2

写后写危险

不,这不是写后写的危险。虽然 I4 似乎是一个写操作——相对于内存而言,它确实是一个写操作——但从微观架构的角度来看,即在流水线阶段和寄存器所在的处理器内部并进行操作,存储指令有两个来源操作数且没有寄存器目标。

因此,R3 在被 I3 写入后被 I4 读取。(换句话说,存储指令需要 R3 的值,作为执行内存存储的值;R3 的值与存储位置的地址和大小一起被馈送到数据存储器,此处为 4)。因此,这是一个先读后写的风险。

于 2020-10-28T02:44:27.867 回答