x86_64 上的原子浮点运算
虽然 C 本身不支持原子双精度运算,但它确实提供无锁原子
对于 x86_64 上的原子向量操作,没有直接的硬件支持。然而,对齐的 128 位和 256 位加载和存储通常保证是原子的。对于非对齐向量操作,原子性保证不太明确。
对双精度和向量操作的汇编级支持
x86_64 为原子操作提供汇编级支持双打和向量:
MSVC 2017 实现无锁原子
MSVC 2017实现无锁原子
CAS: movq QWORD PTR [dst_addr], rax // 64-bit CAS
添加操作使用:
CAS: lock cmpxchg16b QWORD PTR [dst_addr], rax // 128-bit CAS
原子RMW(读-修改-写)操作
原子读-修改-写 (RMW) 操作,例如 fetch_add,需要 CAS 循环实现。在 x86_64 上,CAS 指令支持 16 字节操作 (cmpxchg16b)。
CAS: lock cmpxchg16b QWORD PTR [dst_addr], rax
虽然 CAS 循环提供原子 RMW 功能,但它们比原子加载和存储更昂贵。
附加说明
以上是x86_64 架构上如何处理原子浮点和向量运算?的详细内容。更多信息请关注PHP中文网其他相关文章!