`std::atomic` のストアが x86 での逐次一貫性のために XCHG を使用するのはなぜですか?
std::atomic のストアが逐次一貫性のために XCHG を採用する理由
x86 および x86_64 アーキテクチャの std::atomic のコンテキストでは、逐次一貫性のあるストア操作 (std::memory_order_seq_cst) を採用順次リリース セマンティクスを実現する手法として、メモリ バリアを備えた単純なストアの代わりに XCHG を使用します。
順次一貫性と xchg
順次一貫性により、すべてのメモリ操作が表示されるようになります。ある順番で実行され、この順序はすべてのスレッドで同じです。 XCHG は 2 つのオペランドの値をアトミックに交換する x86 命令であり、本質的にこの逐次一貫性要件を満たします。 XCHG を使用して書き込み操作を実行することにより、std::atomic は、実行順序の特定の時点でストアがすべてのスレッドにグローバルに認識されるようにし、後続の操作による並べ替えを防ぎます。
mov- store mfence vs. XCHG
一方、単純な mov-store に続いてメモリ フェンス (mfence など) を使用する場合、理論的にはリリース セマンティクスを提供しますが、順次リリースのストア操作には十分ではありません。メモリ バリアを確立するメモリ フェンス命令である MFENCE は、続行する前に以前の書き込み操作がメモリにコミットされていることを確認します。ただし、後続のロード操作がストアのリリース前に再順序付けされるのを防ぐことはできません。
パフォーマンスに関する考慮事項
順次リリースのための mov-store mfence と XCHG の選択ストア操作にはパフォーマンスのトレードオフが伴います。
- 特定の CPU (例: Intel Skylake)、特にアトミック操作と同期する必要がある依存コードが周囲にない場合、XCHG は mov-store mfence よりも効率的です。
- 他の CPU では、mov-store mfence の方が好ましい場合があります。高スループットのシナリオ、または周囲のコードがアトミックな実行と重複する可能性がある場合
実装の詳細
実際には、逐次一貫性を備えた std::atomic ストアの具体的な実装は、コンパイラとハードウェア アーキテクチャによって異なります。
- GCC/Clang: 元々使用されていたものmov-store mfence ですが、最近 seq-cst ストアに XCHG の使用に切り替えました。
- インテル コンパイラー: seq-cst ストアに XCHG を使用します。
- Microsoft Visual C : seq-cst にも XCHG を使用しますstores.
Implicit Acquire Fence
x86 ストアに暗黙的取得フェンスがあるという記述は正しくありません。 x86 上のストアには、取得セマンティクスではなくリリース セマンティクスがあります。取得セマンティクスは通常、mfence などのメモリ バリアや std::memory_order_acquire セマンティクスによるアトミック読み取り操作を使用して強制されます。
以上が`std::atomic` のストアが x86 での逐次一貫性のために XCHG を使用するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











C言語関数によって返される値の種類は何ですか?返品値を決定するものは何ですか?

STL(ソート、検索、変換など)のアルゴリズムを効率的に使用するにはどうすればよいですか?
