逐次一貫性が要求される場合、std::atomic のストアはなぜ XCHG を使用するのですか?
最初は逐次一貫性ストア操作が表示される場合がありますが、単純なストア命令とそれに続くメモリ バリアを使用して実装できるものとして、XCHG (暗黙のロック プレフィックスを使用) を使用すると、より最適なソリューション。
XCHG と順序一貫性
x86 および x86_64 アーキテクチャでは、XCHG はメモリ交換と完全なメモリ バリアの両方を提供し、メモリ操作の順序付けを保証します。 。これにより、順次整合性ストアを実装する効果的な方法になります。
通常のストア命令の制限
MOV などの通常のストア命令だけでは、順次整合性を保証できません。 。リリース セマンティクスのみを提供し、ロードの取得など、後の操作で並べ替えることができます。
パフォーマンスに関する考慮事項
MFENCE と XCHG の両方を使用して実装できます。逐次一貫性ストアでは、さまざまな CPU 上で異なるパフォーマンス特性を示します。特定の CPU では、MFENCE が隣接する命令のアウトオブオーダー実行をストールする可能性があります。対照的に、XCHG は、シングルスレッド操作の場合、またはキャッシュされたラインが L1 キャッシュでホットな場合により効率的である可能性があります。
コンパイラーとカーネルの実践
さまざまなコンパイラーと操作システムは、逐次一貫性ストアを実装するためにさまざまなアプローチを好みます。 GCC は歴史的に MOV MFENCE を使用していましたが、他のコンパイラーと Linux カーネルは XCHG を使用していました。
追加メモ
次の点に注意することが重要です。
以上が`std::atomic` のストアが順序一貫性のために XCHG を使用するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。