ホームページ >バックエンド開発 >C++ >x86_64 では Double および Vector 演算はどの程度アトミックですか?

x86_64 では Double および Vector 演算はどの程度アトミックですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-28 13:27:14556ブラウズ

How Atomic Are Double and Vector Operations on x86_64?

x86_64 での double と Vector のアトミック操作

C 11 std::atomicほとんどの実装でロックフリー操作を提供しますが、アトミック AVX または SSE ベクトル操作は依然として CPU に依存し、アセンブリ レベルのサポートがありません。

Double でのアトミック操作

  • ロードおよびストア操作は、倍精度を含む 8 バイトに対して当然アトミックです。
  • 読み取り、変更、書き込みの操作が必要です。直接のメモリ宛先命令がないため、cmpxchg (または TSX) による再試行ループ。
  • Cmpxchg16b は、16 バイトのアトミック RMW 操作に使用できます。
  • IEEE float 操作の一部の特殊なケースでは、整数演算 (絶対値、否定).

ベクトルに対するアトミック操作

  • キャッシュ コヒーレンシ システム全体でのアトミック ベクトル ロード/ストア操作に対するハードウェア サポートはありません。
  • double の整列配列に対するベクトルのロード/ストアは、危険を冒さずに安全に使用できる可能性があります。キャッシュライン ティアリング。
  • 16 バイトのアトミック ロード/ストア/RMW の場合、cmpxchg16b を使用できます。
  • 16 バイトのオブジェクトをアトミックに更新することは可能ですが、8 バイトの半分を個別に読み取ることができます。であることは保証されていませんatomic.

コンパイラのサポート

  • コンパイラは常に atomic の効率的なアセンブリを生成するとは限りません。ロード/ストア (例: xmm レジスタとの間で直接 mov 命令を使用するなど)。
  • アトミック ベクトル (アトミック<__m128d> またはアトミック<__m256d>) は、読み取り専用であっても cmpxchg16b を必要とするため、効率的に実装されません。または書き込み専用操作。

以上がx86_64 では Double および Vector 演算はどの程度アトミックですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。