ホームページ > バックエンド開発 > C++ > x86 は明示的なフェンスを使用せずにリリース取得セマンティクスをどのように実現するのでしょうか?

x86 は明示的なフェンスを使用せずにリリース取得セマンティクスをどのように実現するのでしょうか?

Linda Hamilton
リリース: 2024-12-07 14:39:13
オリジナル
563 人が閲覧しました

How Does x86 Achieve Release-Acquire Semantics Without Explicit Fences?

x86 メモリ モデルと解放取得セマンティクス

MOV を使用した Memory_order_release アトミック ストアの実装に関する以前の問い合わせのフォローアップx86 命令では、追加の追加なしで x86 上で解放と取得がどのように実現されるかについて疑問が生じています。

シングルプロセッサのメモリ順序

Intel のシステム開発マニュアルの Volume 3A 第 8 章には、シングルプロセッサ システムでは、書き込みには特定の順序保証があります:

  • 読み取りには保証されません他の読み取りと並べ替えられます。
  • 書き込みは古い読み取りと並べ替えられません。
  • メモリへの書き込みは、特定の状況を除き、他の書き込みと並べ替えられません。

マルチプロセッサ メモリの順序

ただし、ドキュメントのマルチプロセッサのセクションでは、負荷がどのように適用されるかについては明示的に言及されていません。以下に重点を置いています。

  • コア内での個々のプロセッサの順序付けルールの維持。
  • すべてのプロセッサによる同じ順序での書き込みの遵守。
  • 書き込み間の順序付けの不在。
  • 因果関係に従うメモリの順序付け (つまり、推移性の尊重)
  • ストアを実行するプロセッサ以外のプロセッサによるストア注文の可視性の一貫性。

MOV を使用した取得と解放

理解シングルプロセッサのメモリ順序付けの原則は非常に重要です。マニュアルによると、キャッシュ コヒーレント共有メモリにアクセスする場合、同じ原則がマルチプロセッサ システムに適用されます。これは、並べ替えが各 CPU コア内でローカルにのみ発生することを意味します。

ストアがグローバルに表示されると、すべてのコアに同時に表示されるようになり、すべてのコアが一貫した順序で書き込みを監視することが保証されます。これが、逐次一貫性を確立するために、x86 の mfence などのローカル バリアのみが必要な理由です。

メモリのコヒーレント共有ビュー

x86 アーキテクチャは、コヒーレントな共有メモリを維持します。コヒーレントなキャッシュを介したメモリのビュー。 Intel のマルチプロセッシング メカニズムの定義では、すべてのプロセッサが同じデータにアクセスできるようにするためのメモリの一貫性とキャッシュの一貫性の重要性が強調されています。

追加リソース

  • https://preshing.com/20120913/acquire-and-release-semantics/
  • https://preshing.com/20 120930/weak-vs-strong-memory-models/
  • https://www.cl.cam.ac.uk/~pes20/papers/x86-tso-memory-model.pdf

以上がx86 は明示的なフェンスを使用せずにリリース取得セマンティクスをどのように実現するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート