2017-03-10 7 views
2

私は何がメモリバリアであるかを正確に理解しようとしています。 これまで知っていたことに基づいて、メモリーバリアー(例:mfence)を使用して、メモリーバリアーの前から後、および後ろまでの命令の並べ替えを防止します。メモリバリアはCPUが実行する命令ですか、それとも単なるマーカーですか?

これは、使用中のメモリバリアの例である:

instruction 1 
instruction 2 
instruction 3 
mfence 
instruction 4 
instruction 5 
instruction 6 

今私の質問です:mfence命令は、命令を実行するためにどのような順序でCPUを伝えるだけでマーカーですか?あるいは、CPUが他の命令(例えば、mov)を実行するように実際に実行する命令です。

+3

CPUが実行する命令ですが、他の種類の命令はありません。 –

答えて

7

CPUがそのコードの中で遭遇するすべてのバイトシーケンスは、CPUが実行する命令です。他の種類の指示はありません。

Intel instruction set referenceと特定のページfor mfenceの両方でこれを明確に見ることができます。

MFENCE
はすべて からメモリ負荷と 前MFENCE命令を発行されたストア・ツー・メモリの指示にシリアル化操作を実行します。このシリアライズ動作により、 のプログラム順のMFENCE命令より前のすべてのロード命令とストア命令は、 のMFENCE命令の後に続くロード命令またはストア命令の前にグローバルに認識されます。

MFENCE命令は、すべてのロードおよびストア命令、その他の MFENCE命令、LFENCEおよびSFENCE命令、およびシリアライズ命令(CPUID 命令など)に関して発注されます。 MFENCEは命令ストリームをシリアル化しません。 弱い順序のメモリタイプは、 アウトオブオーダーの問題、投機的読み取り、書き込み結合、 、書き込み崩壊などの手法を使用して、より高いプロセッサ性能を達成するために使用できます。 データの消費者がデータを弱く注文したことを認識または知る度合いはアプリケーションによって異なり、このデータのプロデューサーは不明な場合があります。 MFENCE命令は、ロードを確実に実行するための性能効率のよい方法を に提供し、弱い順序の結果を生成するルーチンとそのデータを消費するルーチンとの間で順序付けを行う。

プロセッサは、WB、WC、および WTメモリタイプを使用するシステムメモリの領域から、推測的にデータを取り出してキャッシュに入れます。 この投機的フェッチはいつでも発生する可能性があり、命令の実行には関係しません。したがって、 は、MFENCE 命令の実行に関して発注されません。データは、MFENCE命令の実行の直前、最中、または後にキャッシュに投機的に持ち込むことができる。

MFence命令は、ちょうどある種のマーカーではなくかなりの作業をしています。

関連する問題