CPUのキャッシュがメインメモリにフラッシュバックされるタイミング
マルチコアCPU、キャッシング、キャッシュコヒーレンシ、そしてメモリがどのように機能するのかを学び始めたばかりであれば、最初は少しわかりにくいかもしれません。そのことを念頭に置いて、今日のSuperUser Q&Aの投稿には、興味をそそられる読者の質問に対する答えがあります。.
本日の質疑応答セッションは、コミュニティ主導のQ&A Webサイトのグループである、Stack Exchangeの下位区分であるSuperUserの好意により提供されます。.
質問
SuperUserの読者CarmeloSは、CPUのキャッシュがいつメインメモリにフラッシュされるのかを知りたがっています。
2つのコアを持つCPUがあり、各コアに独自のL1キャッシュがある場合、Core1とCore2の両方が同時にメモリの同じ部分をキャッシュする可能性はありますか?可能であれば、Core1とCore2の両方がキャッシュ内の値を編集した場合、メインメモリの値はどうなりますか。?
CPUのキャッシュがメインメモリにフラッシュバックされるタイミング?
答え
SuperUserの貢献者であるDavid Schwartz、sleske、そしてKimberly Wが私たちのために答えを持っています。最初に、David Schwartz:
2つのコアを持つCPUがあり、各コアが独自のL1キャッシュを持っている場合、Core1とCore2の両方が同時にメモリの同じ部分をキャッシュする可能性があります。?
そうでない場合、はい、パフォーマンスはひどいでしょう。 2つのスレッドが同じコードを実行しているとします。両方のL1キャッシュにそのコードが必要です。.
可能であれば、Core1とCore2の両方がキャッシュ内の値を編集した場合、メインメモリの値はどうなりますか。?
古い値はメインメモリにありますが、どちらのコアもそれを読み取らないので問題ありません。変更された値をキャッシュから取り出す前に、それをメモリに書き込む必要があります。通常、MESIプロトコルのいくつかの変形が使用されます。従来のMESIの実装では、あるキャッシュ内で値が変更された場合、その同じレベルで他のどのキャッシュにも値を含めることはできません。.
sleskeからの回答が続きます。
はい、2つのキャッシュに同じメモリ領域をキャッシュさせることが起こる可能性があり、実際には実際に多く発生する問題です。たとえば、さまざまな解決策があります。
- 2つのキャッシュは、同意しないことを確認するために通信できます。
- あなたはすべてのキャッシュを監視し、それに応じてそれらを更新するある種のスーパーバイザーを持つことができます。
- 各プロセッサは、キャッシュしたメモリ領域を監視し、書き込みを検出すると、(現在は無効な)キャッシュを破棄します。
この問題はキャッシュコヒーレンシと呼ばれ、このトピックに関するウィキペディアの記事に問題の概要と可能な解決策があります。.
そしてKimberly Wからの私達の最終的な答えは:
あなたの投稿のタイトルの中の質問に答えるために、それはキャッシングプロトコルが何であるかによって異なります。それがライトバックである場合、キャッシュコントローラが他のキャッシュブロックを既に占有されているスペースに入れる以外に選択肢がないときにのみ、キャッシュはメインメモリにフラッシュバックされます。以前にスペースを占めていたブロックが削除され、その値がメインメモリに書き戻されます。.
他のプロトコルはライトスルーです。その場合、キャッシュブロックはいつでもレベルで書き込まれます。 n, 対応するレベルのブロック n + 1 更新されます。概念的には、その下にカーボンペーパーを使用してフォームに記入するのと同じです。上に書いたものはすべて下のシートにコピーされます。これは明らかにより多くの書き込み操作を伴うので遅くなりますが、キャッシュ間の値はより一貫しています。ライトバック方式では、最高レベルのキャッシュのみが特定のメモリブロックの最新の値を持ちます。.
説明に追加するものがありますか?コメントで音を消す。他の技術に精通したStack Exchangeユーザーからの回答をもっと読みたいですか?こちらのディスカッションスレッドをチェックしてください。.
画像クレジット:Lemsipmatt(Flickr)