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中文網其他相關文章!