首页 > 后端开发 > C++ > x86_64 上的双精度运算和向量运算的原子性如何?

x86_64 上的双精度运算和向量运算的原子性如何?

Susan Sarandon
发布: 2024-11-28 13:27:14
原创
573 人浏览过

How Atomic Are Double and Vector Operations on x86_64?

x86_64 中双精度数和向量的原子操作

而 C 11 std::atomic在大多数实现上提供无锁操作,原子 AVX 或 SSE 向量操作仍然依赖于 CPU,并且缺乏汇编级支持。

双精度上的原子操作

  • 对于 8 个字节,包括双精度数,加载和存储操作自然是原子的。
  • 读取-修改-写入操作需要一个使用 cmpxchg(或 TSX)重试循环,因为没有直接内存目标指令。
  • Cmpxchg16b 可用于 16 字节原子 RMW 操作。
  • IEEE 浮点操作的一些特殊情况可以是使用整数运算实现(例如绝对值,

向量上的原子操作

  • 跨缓存一致性系统的原子向量加载/存储操作没有硬件支持。
  • 双精度对齐数组上的向量加载/存储可能可以安全使用,而不会带来缓存行的风险
  • 对于 16 字节原子加载/存储/RMW,可以使用 cmpxchg16b。
  • 原子更新 16 字节对象是可能的,但不能保证单独读取 8 字节一半是原子的。

编译器支持

  • 编译器并不总是为atomic生成有效的汇编。加载/存储(例如,直接使用 mov 指令传入/传出 xmm 寄存器)。
  • 原子向量(原子<__m128d> 或原子<__m256d>)未有效实现,因为即使是只读,它们也需要 cmpxchg16b或只写操作。

以上是x86_64 上的双精度运算和向量运算的原子性如何?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板