LukeGeeson

主要观点:

  • 讨论编译器关于放松原子操作的语义问题,如 Arm AArch64 架构中原子指令的行为及 C/C++ 原子操作的内存顺序参数。
  • 当前编译器实现存在错误,与最近的 C/C++ 模型不符,通过测试工具发现大量与放松原子操作相关的 bug。
  • 提出多种修复放松原子操作 bug 的提案,如 Branch-After-Load(BAL)等,并详细阐述其优点和实现方式。
  • 建议在编译器中实现 Hans Boehm 的 BAL 提案,并通过命令行标志控制,以支持当前实践并提供性能和正确性的选择。

关键信息:

  • 放松原子操作在编译器中的语义定义不明确,导致实际行为与模型不符。
  • 测试工具 Téléchat 可用于测试原子操作实现的 bug。
  • 提出的 BAL 提案被证明在学术上是可靠的,具有良好的性能权衡和可实现性。
  • 给出了关于 BAL 提案的常见问题解答,包括性能成本、与其他提案的比较等。

重要细节:

  • 不同架构和编译器在优化级别下对放松原子操作的处理结果,如 Armv8-a、Armv7-a、RISC-V、IBM PowerPC、Intel x86-64、MIPS 等。
  • 各种提案的具体内容和优缺点,如 BAL、Fence-Before-Store(FBS)、Strong-Release-Acquire(SRA)等。
  • 详细解释了 BAL 提案的原理和示例,以及它在不同架构上的效果。
  • 提及与编译器团队和相关人员的讨论及致谢。
阅读 13
0 条评论