主要观点:
- 讨论编译器关于放松原子操作的语义问题,如 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 提案的原理和示例,以及它在不同架构上的效果。
- 提及与编译器团队和相关人员的讨论及致谢。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。