如果处理器支持无序执行,那么优化数据危险是否有意义?

问题描述 投票:2回答:1

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

optimization dependencies cpu-architecture processor
1个回答
2
投票

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

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

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

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

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

内存依赖性也很重要。特别地,如果由于某种结构限制而存储结果不能转发到负载,则存储器RAW依赖性将导致惩罚。内存WAW和WAR危险没有处罚,因为大多数处理器按程序顺序退出指令。也就是说,在具有强大的内存排序模型(如x86)的体系结构中,通常,所有存储都必须按程序顺序执行,而不管WAW依赖性如何。

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

© www.soinside.com 2019 - 2024. All rights reserved.