ホームページ >バックエンド開発 >C++ >x86 アーキテクチャ上でロードとストアのアトミック性はどのように保証されますか?

x86 アーキテクチャ上でロードとストアのアトミック性はどのように保証されますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-21 13:58:14338ブラウズ

How is Atomicity of Loads and Stores Guaranteed on x86 Architectures?

x86 でのロードとストアのアトミック性

メモリ上のアトミック操作は、キャッシュ内で実行できるため、RAM 上で直接実行する必要はありません。すべての観察者はそれらを原子として認識します。コア間のキャッシュの一貫性により、DMA 操作でもこのアトミック性が確実に尊重されます。

アトミック性の実装

最大 64 ビットのアラインメントされたロードまたはストアの場合、アトミック性は次のようになります。操作はシステムのデータ パス内で完了するため、「無料」で実現されます。コア、メモリ、PCIe。これは、ハードウェアを追加したり、他のリクエストをブロックしたりすることなく、CPU ハードウェアが操作のアトミック性を保証できることを意味します。

キャッシュ内のアトミック操作

キャッシュ内のデータの変更他のコアまたは DMA アクセスは単一の操作として変更を監視するため、L1 キャッシュはアトミックで十分です。この変更は、アウトオブオーダー実行のため、最初のストアよりも遅く発生する可能性があります。

非整列アクセス

パフォーマンスの最適化は別として、キャッシュ ラインの境界を越えてデータにアクセスする非アトミックな動作が発生する可能性があります。 x86 では、最大 8 バイトまでのアライメントされたアクセスはアトミックです。これは、データ パスが狭くても、キャッシュ ライン全体 (通常は 64B) がアトミックに転送されることを意味します。ただし、より広範囲のアクセスには、同時アクセスを防ぐためにロックが必要です。

アトミック読み取り-変更-書き込み

アトミックな読み取り-変更-書き込み操作は、より大きな課題を引き起こします。 。アトミック性を維持するには、コアはキャッシュ ラインを Modified 状態に維持し、操作の進行中に外部からの変更をブロックする必要があります。アライメントされていない操作の場合、他のコアが変更をアトミックに観察できるようにするためにバス ロックが必要になる場合があります。

以上がx86 アーキテクチャ上でロードとストアのアトミック性はどのように保証されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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