【问题标题】:Types of optimisations happen in cpp relaxed memory model?cpp 宽松内存模型中发生的优化类型?
【发布时间】:2015-08-03 20:54:58
【问题描述】:

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

我遇到过:speculationregister allocation,但请确保列表不会到此结束。

当开发人员尝试在 cpp 中使用宽松内存模型时,会发生哪些各种编译器优化?

【问题讨论】:

    标签: c++ optimization memory-model


    【解决方案1】:

    投机是一个总称,有几十种。寄存器分配是编译(对于逻辑寄存器)和 CPU 工作(对于物理寄存器是否存在)的自然过程的一部分——这些都与宽松的内存模型无关。

    我能想到的主要优化是宽松的内存模型允许存储重新排序,而普通编译器和 CPU 会阻止。这允许更好的内存并行性,因为您不序列化写入,甚至更好的缓存命中率,因为您可以使用缓存行而不会停止和冒着从缓存中丢失行的风险。这也允许更好地将多个存储组合到同一个缓存行(写入组合),从而提供更好的带宽。

    我主要谈论的是存储,因为负载通常已经通过现代乱序 CPU 中的硬件进行了优化。有一些预防措施用于检测那里的问题,但惩罚可能不会太严重。 还有一些障碍,一些较弱的模型可以使用比 x86 的重型栅栏更轻的栅栏,但实际上您可能必须在较弱的模型上使用更多的栅栏,因此这实际上取决于您要实现的目标以及如何实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      • 2018-04-03
      • 2021-04-17
      • 2011-08-30
      相关资源
      最近更新 更多