2016-03-25 4 views
1

インテルのマニュアルは言う:キャッシュ・コヒーレンシ・メカニズムは、自動的にメモリの同じ領域をキャッシュしている2つ以上のプロセッサを防止
内部プロセッサキャッシュ
にLOCK操作の"キャッシュコヒーレンシメカニズム"のため、 "ロック"オペコードプレフィックスは使用されていませんか?

8.1.4効果を...その領域内のデータを同時に変更する。

つまり、lockオペコードのプレフィックスはアプリケーションプログラミングにとって役に立たないということですか?

CPUキャッシュは常にオンになっており、アプリケーションでアクセス可能なすべてのメモリがキャッシュ可能であるため、共有メモリに格納されたデータの整合性を保護するためにキャッシュコヒーレンシメカニズムは常にオンガードです。

は、「キャッシュ・コヒーレンシ・メカニズムは、」それは常に独立して、あなたがlock接頭辞を使用しているか否かの作品、マルチコアCPUのキャッシュに内在している部分です。

さらに詳しい質問:
私はCore2Duo CPUを持っており、私のアプリケーションプログラムは共通のグローバル変数で動作する2つの並列スレッドで動作します。
接頭辞lockを省略してlock add [ESI],EAXlock cmpxchg8b [ESI]のような説明には間違いありませんか?

+3

いいえ、省略しても安全です。キャッシュのコヒーレンシは命令をアトミックにしません。 – Jester

+1

コヒーレンシメカニズムは、例えば、コアAのL1が、コアBのL1と異なるデータを有するキャッシュラインのキャッシュされたコピーを有する可能性を防止するだけである。 Rossの答えに追加するには、 'add [esi]、eax'は実際にはロード、追加、ストアです。 –

答えて

6

いいえ、LOCK接頭辞がないと、読み取り/変更/書き込み操作全体でキャッシュロックが保持されません。これは、操作が他のプロセッサーに対してアトミックではないことを意味します。 LOCK接頭辞は、通常使用されているやや緩やかな強いメモリ順序ではなく、厳密なメモリ順序付けも強制します。

関連する問題