作者:gaoming1009_422 | 来源:互联网 | 2022-10-22 16:24
两种操作都会影响R2
。如果i2
写回发生在的写回之前i1
,但i1
最终发生的写回,R2
则将得到结果R4 + R7
而不是的值R1 + R3
。
WAW危害是关于结果值将被后续的写入所覆盖,而该写入不应覆盖该值。
1> Thomas Jager..:
两种操作都会影响R2
。如果i2
写回发生在的写回之前i1
,但i1
最终发生的写回,R2
则将得到结果R4 + R7
而不是的值R1 + R3
。
WAW危害是关于结果值将被后续的写入所覆盖,而该写入不应覆盖该值。
2> Peter Cordes..:
问题不是执行,而是执行。这只是防止这些指令无序执行的写回(如果您未进行寄存器重命名)。
的最终结果R2
(如该对之后的其他后续指令所示)必须匹配程序顺序,因此它必须具有第二条指令的结果。
这就是为什么现代乱序执行CPU使用寄存器重命名(Tomasulo算法)而不仅仅是记分板的原因:它完全消除了WAW和WAR的危害。请参阅我的答案的第一部分,“ 为什么mulss在Haswell上只需要3个周期,而不同于Agner的指令表?从理论上讲,关于寄存器重命名如何使同一寄存器重用于不同结果的另一种解释不成问题。
另请参阅在Intel Sandybridge系列CPU中为管道优化程序,在此我还解释了WAW和WAR的反依赖性不会导致现代乱序执行CPU停顿。
对于写入内存(而不是寄存器),存储缓冲区负责隐藏WAW和WAR危害。