9

MESI snooping cache coherence protocolについて読んでいましたが、これは現代のマルチコア x86 プロセッサで使用されているプロトコルだと思います (間違っていたら訂正してください)。今、その記事は一箇所でこれを言っています。

Modified 状態のラインを保持するキャッシュは、対応するメイン メモリ ロケーションの (システム内の他のすべてのキャッシュからの) 試行されたすべての読み取りをスヌープ (インターセプト) し、保持しているデータを挿入する必要があります。これは通常、読み取りを強制的にバックオフ (つまり、後で再試行) してから、データをメイン メモリに書き込み、キャッシュ ラインを共有状態に変更することによって行われます。

今私が理解していないのは、データをメインメモリに書き込む必要がある理由です。キャッシュ コヒーレンスは、メモリに移動せずにキャッシュ内のコンテンツを同期したままにできますか (もちろん、キャッシュ ラインが完全に削除されない限り)。つまり、一方のコアが常に読み取り、もう一方のコアが常に書き込みを行っている場合、データをキャッシュ メモリに保持し、キャッシュ内のデータを更新し続けてみませんか。メインメモリへの書き戻しのパフォーマンスが発生するのはなぜですか?

つまり、コアがデータを読み取り、書き込みコアのキャッシュから直接読み取り、それに応じてキャッシュを変更することはできませんか?

4

5 に答える 5

6

今私が理解していないのは、データをメインメモリに書き込む必要がある理由です。キャッシュ コヒーレンスは、メモリに移動せずにキャッシュ内のコンテンツを同期したままにできますか (もちろん、キャッシュ ラインが完全に削除されない限り)。

これは起こります。

私のラップトップには、次のような iCore 5 があります。

   M
   N
   S
  L3U
L2U L2U
L1D L1D
L1I L1I
 P   P
L L L L

M = Main memory
N = NUMA node
S = Socket
L3U = Level 3 Unified
L2U = Level 2 Unified
L1D = Level 1 Data
L1I = Level 1 Instruction
P = Processor
L = Logical core

2 つの論理コアが同じデータで動作している場合、それらはメイン メモリに移動しません。L1 キャッシュと L2 キャッシュを介して交換します。同様に、2 つのプロセッサのコアが動作している場合、それらは L3 キャッシュを介してデータを交換します。エビクションが発生しない限り、メイン メモリは使用されません。

しかし、より単純な CPU は実際には物事に関して賢くない可能性があります。

于 2012-04-07T21:28:07.773 に答える
3

MESI プロトコルでは、複数のキャッシュが同じキャッシュ ラインを同じmodified状態に保つことはできません。そのため、1 つのキャッシュ ラインが変更され、他のプロセッサのキャッシュから読み取りたい場合は、最初にメイン メモリに書き込んでから読み取る必要があります。これにより、両方のプロセッサのキャッシュがshareそのライン (共有状態) になります。

于 2012-04-07T20:57:23.420 に答える
2

通常、キャッシュは相互に直接書き込むことができないためです (より多くの帯域幅が必要になるため)。

于 2012-04-07T21:03:27.440 に答える
1

私が理解していないのは、データをメインメモリに書き込む必要がある理由です

modifiedプロセッサ A にその行があるとしましょう。ここで、プロセッサ B がメイン メモリから同じキャッシュ (A によって変更された) ラインを読み取ろうとしています。メイン メモリのコンテンツは現在無効であるため (A がコンテンツを変更したため)、A はその行に対する他の読み取り試行をスヌーピングします。したがって、プロセッサ B (およびその他) がその行を読み取れるようにするために、A はそれをメイン メモリに書き戻さなければなりません。

I mean if one core is constantly reading and the other constantly writing,

データをキャッシュメモリに保持し、キャッシュ内のデータを更新し続けませんか。

あなたは正しく、これは通常行われていることです。しかし、ここではそうではありません。他の誰か (この例ではプロセッサ B) が読み取ろうとしています。sharedしたがって、A と B の両方が現在キャッシュ ラインを共有しているため、Aはそれを書き戻し、キャッシュ ラインのステータスを にする必要があります。

于 2012-04-07T20:56:36.477 に答える