【发布时间】:2015-08-03 20:54:58
【问题描述】:
很难找到在宽松内存模型中发生的各种优化。
我遇到过:speculation 和 register allocation,但请确保列表不会到此结束。
当开发人员尝试在 cpp 中使用宽松内存模型时,会发生哪些各种编译器优化?
【问题讨论】:
标签: c++ optimization memory-model
很难找到在宽松内存模型中发生的各种优化。
我遇到过:speculation 和 register allocation,但请确保列表不会到此结束。
当开发人员尝试在 cpp 中使用宽松内存模型时,会发生哪些各种编译器优化?
【问题讨论】:
标签: c++ optimization memory-model
投机是一个总称,有几十种。寄存器分配是编译(对于逻辑寄存器)和 CPU 工作(对于物理寄存器是否存在)的自然过程的一部分——这些都与宽松的内存模型无关。
我能想到的主要优化是宽松的内存模型允许存储重新排序,而普通编译器和 CPU 会阻止。这允许更好的内存并行性,因为您不序列化写入,甚至更好的缓存命中率,因为您可以使用缓存行而不会停止和冒着从缓存中丢失行的风险。这也允许更好地将多个存储组合到同一个缓存行(写入组合),从而提供更好的带宽。
我主要谈论的是存储,因为负载通常已经通过现代乱序 CPU 中的硬件进行了优化。有一些预防措施用于检测那里的问题,但惩罚可能不会太严重。 还有一些障碍,一些较弱的模型可以使用比 x86 的重型栅栏更轻的栅栏,但实际上您可能必须在较弱的模型上使用更多的栅栏,因此这实际上取决于您要实现的目标以及如何实现。
【讨论】: