【问题标题】:Does it make sense to optimize data hazards if a processor supports out-of-order execution?如果处理器支持乱序执行,那么优化数据危害是否有意义?
【发布时间】:2015-07-13 02:06:03
【问题描述】:

程序员是否仍有可能为支持完整out-of-order executionn 的处理器优化数据危害?

【问题讨论】:

标签: optimization dependencies cpu-architecture processor


【解决方案1】:

能够乱序执行的处理器不一定能够消除任何数据危害。乱序执行实现可能不包括寄存器重命名,因此 WAW 和 WAR 危险将导致管道停顿。

但是,大多数现代 OoOE 处理器都实现了寄存器重命名,从而消除了 WAW 和 WAR 危害,但没有消除 RAW 危害。如果浮点除法指令后跟一系列需要除法结果的指令,则流水线可能会停顿很长时间。另一个示例是分支指令依赖于导致页面错误的加载指令。无论该分支的预测是否正确,重新排序缓冲区都可能变满或几乎满,可能导致停顿。如果分支被错误预测,惩罚会高得多。所以您通常不必担心注册 WAW 和 WAR 危害,但 RAW 危害很重要。

有一些技术可用于减少 RAW 危害的影响:

  • SIMD 指令可用于完全重叠多个数据元素的 WAR 依赖项的延迟。
  • 融合包含相互独立的依赖链的循环,以便这些链可以在超标量 CPU 中并行执行。这提高了可用执行单元的利用率。
  • 使用延迟较低的指令。例如,可以用左移指令替换乘以 2 的幂的指令。

通常,优化编译器能够执行这些优化,尽管它可能仍会产生次优的机器代码。

内存依赖也很重要。特别是,如果由于某些结构限制而无法将存储结果转发给加载,则内存 RAW 依赖项将受到惩罚。内存 WAW 和 WAR 危害没有惩罚,因为大多数处理器按程序顺序退出指令。也就是说,在 x86 等具有强大内存排序模型的架构中,通常所有存储都必须按程序顺序执行,而与 WAW 依赖关系无关。

还有许多其他可能的性能问题。您可以参考您正在开发的处理器和/或架构的优化指南。

【讨论】:

    猜你喜欢
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多