LOCK XCHG
x86 命令とMOV+MFENCE
シーケンシャル一貫性ストアのロジックとパフォーマンスの違いは何ですか。
XCHG
( gcc 以外のコンパイラのロード結果は無視します。ストア + メモリ バリア効果に使用します。)
シーケンシャルな一貫性のために、アトミック操作の実行中にLOCK XCHG
、単一のキャッシュラインのみをロックし、その逆はMOV+MFENCE
キャッシュ L3(LLC) 全体をロックするというのは本当ですか?
LOCK XCHG
x86 命令とMOV+MFENCE
シーケンシャル一貫性ストアのロジックとパフォーマンスの違いは何ですか。
XCHG
( gcc 以外のコンパイラのロード結果は無視します。ストア + メモリ バリア効果に使用します。)
シーケンシャルな一貫性のために、アトミック操作の実行中にLOCK XCHG
、単一のキャッシュラインのみをロックし、その逆はMOV+MFENCE
キャッシュ L3(LLC) 全体をロックするというのは本当ですか?
違いは使用目的です。
MFENCE (または SFENCE または LFENCE) は、2 つ以上のスレッドからアクセスできるメモリ領域の一部をロックする場合に役立ちます。このメモリ領域のロックをアトミックに設定すると、その後、すべての非アトミック命令を使用できます。ただし、メモリ領域のロックを解除する前に SFANCE (または MFENCE) を 1 命令呼び出して、ロックされたメモリが他のすべてのスレッドから正しく見えるようにする必要があります。
1 つのメモリ アライメント変数のみを変更する場合は、LOCK XCHG などのアトミック命令を使用しているため、メモリ領域のロックは必要ありません。