优化类型发生在cpp宽松内存模型中?

时间:2015-05-22 00:15:17

标签: c++ optimization memory-model

发现很难找到在宽松的内存模型中发生的各种优化。

我遇到过:推测注册分配,但请确保列表不会在此处结束。

当开发人员尝试在cpp中使用宽松内存模型时,会发生什么样的编译器优化?

1 个答案:

答案 0 :(得分:0)

猜测是一个通用术语,有几十种类型。寄存器分配是编译的自然过程的一部分(对于逻辑寄存器)和CPU工作(对于物理寄存器,就是这样) - 这些事情都与宽松的存储器模型无关。

我能想到的主要优化是宽松的内存模型允许存储重新排序,而常见的编译器和CPU则会阻止。这样可以实现更好的内存并行性,因为您不会对写入进行序列化,甚至可以更好地缓存命中率,因为您可以使用缓存的行而不会停止并且有可能从缓存中丢失行。这也允许更好的机会将多个存储组合到同一个高速缓存行(写入组合),从而提供更好的带宽。

我主要谈论的是商店,因为负载通常已经被现代无序CPU中的硬件优化了。有一些预防措施用于检测那里的问题,但惩罚可能不是太糟糕。 也存在障碍,一些弱模型可以使用比x86重型栅栏更轻的模型,但实际上你可能不得不在较弱的模型上使用更多的栅栏,所以它实际上取决于你想要实现的目标和方式。