【问题标题】:What is WAW Hazard?什么是 WAW 危害?
【发布时间】:2019-10-14 09:38:55
【问题描述】:

维基百科的Hazard (computer architecture) 文章:

写后写 (WAW)(i2 尝试在操作数之前写 由i1 编写)写后写(WAW)数据危害可能发生在 并发执行环境。

举例举例:

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

i2 的回写 (WB) 必须是 延迟到 i1 完成执行。

我没看懂。

如果i2i1 之前执行,会出现什么问题?

【问题讨论】:

    标签: assembly pipeline cpu-architecture microprocessors


    【解决方案1】:

    执行不是问题所在;只有回写才能防止这些指令的乱序执行(如果您没有进行寄存器重命名)。

    R2 中的最终结果(由后面的其他指令这对中看到)必须与程序顺序匹配,因此它必须具有第二条指令的结果。


    为什么现代乱序执行 CPU 使用寄存器重命名(Tomasulo 算法) 而不仅仅是记分板:它完全消除了 WAW 和 WAR 危害。请参阅我在Why does mulss take only 3 cycles on Haswell, different from Agner's instruction tables? 上的回答的第一部分,以从理论上解释寄存器重命名如何使同一寄存器重用于不同的结果不成问题。

    另请参阅Deoptimizing a program for the pipeline in Intel Sandybridge-family CPUs,其中我还解释了 WAW 和 WAR 反依赖不会导致现代乱序执行 CPU 停止。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-12
        • 1970-01-01
        • 1970-01-01
        • 2011-08-04
        • 1970-01-01
        • 1970-01-01
        • 2016-07-22
        相关资源
        最近更新 更多