web-dev-qa-db-ja.com

マルチコアCPUでのx86LOCKの質問

X86 ASMの「LOCK」コマンドプレフィックスにより、「LOCK」に続く命令の実行中にすべてのコアがフリーズするというのは本当ですか?

私はこれをブログ投稿で読みましたが、意味がありません。これが本当かどうかを示すものは何も見つかりません。

33
IamIC

そのアドレスのメモリバスをロックすることです。 Intel 64およびIA-32アーキテクチャソフトウェア開発者マニュアル-第3A巻:システムプログラミングガイド、パート1 は次のように述べています。

7.1.4内部プロセッサキャッシュに対するLOCK操作の影響。

Intel486およびPentiumプロセッサの場合、ロックされているメモリの領域がプロセッサにキャッシュされている場合でも、LOCK#信号はLOCK操作中に常にバス上でアサートされます。

P6以降のプロセッサフ​​ァミリの場合、LOCK操作中にロックされているメモリの領域が、ロック操作を実行しているプロセッサにキャッシュされ、ライトバックメモリとして完全に含まれている場合キャッシュラインの場合、プロセッサはバス上でLOCK#信号をアサートしない可能性があります。代わりに、メモリの場所を内部的に変更し、キャッシュコヒーレンシメカニズムが操作がアトミックに実行されることを保証できるようにします。この操作は「キャッシュロック」と呼ばれます。キャッシュコヒーレンシメカニズムは、同じメモリ領域を持つ2つ以上のプロセッサがその領域のデータを同時に変更するのを自動的に防ぎます。 (強調を追加)

ここでは、P6以降のチップが、バスを本当にブロックする必要があるのか​​、それともインテリジェントキャッシングに依存できるのかを判断するのに十分なほどスマートであることを学びます。これはきちんとした最適化だと思います。

これについては、ブログ投稿「 ロックはどのようにロックしますか? "」で詳しく説明しました。

48
Jeff Moser

いいえ。ただし、このプロセッサがメモリにアクセスしている間、他のプロセッサを強制的に待機させる場合があります。これらの待機状態が違いを生むかどうかは、プロセッサがキャッシュを実行している程度によって異なります。

6
Steven Sudit