什么是 WAW 危害?

What is WAW Hazard?

Wikipedia's Hazard (computer architecture) article:

Write after write (WAW) (i2 tries to write an operand before it is written by i1) A write after write (WAW) data hazard may occur in a concurrent execution environment.

Example For example:

i1. R2 <- R4 + R7   
i2. R2 <- R1 + R3   

The write back (WB) of i2 must be delayed until i1 finishes executing.

这个我没看懂

如果i2先于i1执行,会有什么问题?

两个操作都会影响 R2。如果 i2 回写发生在 i1 的回写之前,但是 i1 的回写最终发生,那么 R2 将有 R4 + R7 的结果而不是 R1 + R3.

的值

WAW 危险是关于结果值被不应该覆盖该值的后续写入覆盖。

问题不在于执行;只有 write-back 会阻止 out-of-order 执行这些指令(如果您没有进行寄存器重命名)。

R2 中的最终结果(如其他后续指令所见 这对)必须匹配程序顺序,因此它必须具有以下结果第二条指令。


这就是 为什么 现代 out-of-order 执行 CPU 使用寄存器重命名(Tomasulo 算法) 而不仅仅是记分牌:它完全消除 WAW 和 WAR 危险。请参阅我在 上的回答的第一部分,以从理论上解释寄存器重命名如何使同一寄存器重用以获得不同结果不是问题。

另请参阅 ,其中我还解释了 WAW 和 WAR anti-dependencies 不会在现代 out-of-order 执行 CPU 上造成停顿。

对于写入内存(而不是寄存器),存储缓冲区负责隐藏 WAW 和 WAR 危险。