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


18

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

回答:


26

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

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

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

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


15

はい、これは(2つのキャッシュが同じメモリ領域をキャッシュすることで)発生する可能性がありますが、実際には実際に多く発生する問題です。たとえば、次のようなさまざまなソリューションがあります。

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

この問題は、キャッシュの一貫性と呼ばれます。このトピックに関するウィキペディアの記事には、問題の概要と可能な解決策が記載されています。


2

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

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


1
ここの読者の何パーセントがこれまでにカーボン紙を使用したことがあるのだろうか。:)
バーマー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.