CPU キャッシュはいつメインメモリにフラッシュバックされますか?

CPU キャッシュはいつメインメモリにフラッシュバックされますか?

2 つのコアを持つ CPU があり、各コアに独自の L1 キャッシュがある場合、Core1 と Core2 が同時にメモリの同じ部分をキャッシュすることは可能ですか?
可能であれば、Core1 と Core2 の両方がキャッシュ内の値を編集した場合、メイン メモリの値はどうなるでしょうか?

答え1

2 つのコアを持つ CPU があり、各コアに独自の L1 キャッシュがある場合、Core1 と Core2 が同時にメモリの同じ部分をキャッシュすることは可能ですか?

はい。そうでない場合、パフォーマンスはひどいものになります。同じコードを実行する 2 つのスレッドを考えてみましょう。そのコードは両方の L1 キャッシュに必要です。

可能であれば、Core1 と Core2 の両方がキャッシュ内の値を編集した場合、メインメモリの値はどうなりますか?

古い値はメインメモリにありますが、どちらのCPUもそれを読み取ることはないので問題にはなりません。変更された値をキャッシュから取り出す前に、メモリに書き込む必要があります。通常、MESIプロトコルが使用されます。MESI の従来の実装では、あるキャッシュで値が変更されると、その値は同じレベルの他のキャッシュにはまったく存在できなくなります。

答え2

はい、これ (2 つのキャッシュが同じメモリ領域をキャッシュする) は発生する可能性があり、実際には頻繁に発生する問題です。解決策はいくつかあります。たとえば、次のとおりです。

  • 2つのキャッシュは通信して、意見の相違がないことを確認できます
  • すべてのキャッシュを監視し、それに応じて更新する何らかのスーパーバイザーを持つことができます。
  • 各プロセッサはキャッシュしたメモリ領域を監視し、書き込みを検出すると(無効になった)キャッシュを破棄します。

問題はキャッシュ一貫性このトピックに関するWikipediaの記事問題と可能な解決策の概要がわかりやすく記載されています。

答え3

タイトルの質問にお答えすると、キャッシュ プロトコルによって異なります。ライトバックの場合、キャッシュ コントローラが既に占有されているスペースに新しいキャッシュ ブロックを配置する以外に選択肢がない場合にのみ、キャッシュがメイン メモリにフラッシュバックされます。以前そのスペースを占有していたブロックは削除され、その値がメイン メモリに書き戻されます。

もう 1 つのプロトコルはライトスルーです。その場合、レベル n のキャッシュ ブロックが書き込まれるたびに、レベル (n+1) の対応するブロックが更新されます。(これは、フォームの下にカーボン紙を敷いて記入するのと概念的に似ています。上に書き込んだ内容が下のシートにコピーされます。) これは、明らかに書き込み操作が多くなるため遅くなりますが、キャッシュ間の値の一貫性が高まります。ライトバック方式では、特定のメモリ ブロックの最新の値は、最上位レベルのキャッシュのみに保持されます。

関連情報