x86_64 でのアトミック浮動小数点演算
C はネイティブにアトミックな double 演算をサポートしていませんが、ロックフリーの atomic
x86_64 でのアトミック ベクトル操作の場合、ハードウェアの直接サポートはありません。ただし、アライメントされた 128 ビットおよび 256 ビットのロードおよびストアは、通常、アトミックであることが保証されています。非整列ベクトル演算の場合、アトミック性の保証はそれほど明確ではありません。
Double および Vector 演算のアセンブリ レベルのサポート
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 (読み取り-変更-書き込み) 操作
fetch_add などのアトミックな読み取り-変更-書き込み (RMW) 操作には CAS ループが必要です 実装。 x86_64 では、CAS 命令は 16 バイトの操作 (cmpxchg16b) をサポートします。
CAS: lock cmpxchg16b QWORD PTR [dst_addr], rax
CAS ループはアトミック RMW 機能を提供しますが、アトミックなロードおよびストアよりも高価です。
追加注
以上がx86_64 アーキテクチャではアトミック浮動小数点演算とベクトル演算はどのように処理されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。