メモリフェンスとは何ですか? 質問する

メモリフェンスとは何ですか? 質問する

明示的なメモリフェンスを使用するとはどういう意味ですか?

ベストアンサー1

パフォーマンス向上のため、最近の CPU は、利用可能なシリコン (メモリの読み取り/書き込みを含む) を最大限に活用するために、命令を順不同で実行することがよくあります。ハードウェアは命令の整合性を強制するため、単一の実行スレッドではこれに気付くことはありません。ただし、複数のスレッドまたは揮発性メモリ (メモリ マップ I/O など) のある環境では、予期しない動作が発生する可能性があります。

メモリ フェンス/バリアは、メモリの読み取り/書き込みが期待どおりの順序で行われることを意味する命令のクラスです。たとえば、「フル フェンス」は、フェンスの前のすべての読み取り/書き込みが、フェンス後の読み取り/書き込みより先にコミットされることを意味します。

メモリ フェンスはハードウェアの概念であることに注意してください。高水準言語では、ミューテックスやセマフォを扱うのに慣れています。これらは低水準でメモリ フェンスを使用して実装される可能性があり、メモリ バリアを明示的に使用する必要はありません。メモリ バリアを使用するには、ハードウェア アーキテクチャを慎重に検討する必要があり、アプリケーション コードよりもデバイス ドライバーでよく見られます。

CPU の並べ替えはコンパイラの最適化とは異なりますが、アーティファクトは類似している可能性があります。望ましくない動作 (C での volatile キーワードの使用など) が発生する可能性がある場合は、コンパイラによる命令の並べ替えを停止するための別の対策を講じる必要があります。

おすすめ記事