如果处理器支持排序外执行,则优化数据危害是有意义的吗?



程序员是否仍有可能优化支持全序executionn的处理器的数据危害?

能够执行订购外的处理器不一定能够消除任何数据危害。备用执行实施可能不包括注册重命名,因此WAW和战争危害将导致管道摊位。

但是,大多数现代的OOOE处理器实施注册登记册,从而消除了WAW和战争危害,但没有原始危害。如果浮点划分指令之后是一系列需要划分结果的指令,则管道可能会停滞很长时间。另一个示例是分支指令取决于导致页面故障的负载指令。不管对该分支的预测是否正确,重新订购缓冲液可能会变满或几乎完全会导致摊位。如果分支机构的预测错误,则罚款将更高。因此,您通常不必担心注册和战争危害,但原始危害很重要。

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

  • SIMD指令可用于完全重叠多个数据元素的战争依赖性潜伏期。
  • 融合的循环包含彼此独立的依赖链,以便可以在超量表CPU中并行执行链。这增加了可用执行单元的利用。
  • 使用延迟较低的说明。例如,乘以2的功率可以用左左指令替换。

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

内存依赖性也很重要。特别是,如果由于某种结构限制,存储器原始依赖性将受到惩罚。记忆和战争危害没有处罚,因为大多数处理器按计划顺序退休说明。也就是说,在具有强大内存订购模型(例如X86)的体系结构中,通常所有商店都必须按程序顺序执行,而不论WAW依赖性。

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

相关内容

最新更新