7

L1/L2 キャッシュは Intel で包括的であり、L1/L2 キャッシュは 8 方向の連想性です。つまり、セットには 8 つの異なるキャッシュ ラインが存在します。キャッシュラインは全体として操作されます。つまり、キャッシュラインから数バイトを削除したい場合、削除したいバイトだけでなく、キャッシュライン全体が削除されます。私は正しいですか?

ここで、私の質問は、セットのキャッシュ ラインが、他のプロセスによって、または clflush(キャッシュ ライン/ブロックの手動による削除) を使用して、キャッシュから削除/削除されるたびに、システムはそのキャッシュ ラインの削除されたデータをどこかに保存しますか? (任意のバッファ、レジスタなどで)、次回その場所からデータをロードして、メインメモリまたはより高いレベルのキャッシュからデータをロードする場合と比較してレイテンシを短縮できるようにするか、 または 常にキャッシュ内のデータを単純に無効にして、次回は、次の上位レベルからデータをロードします。

記事への提案やリンクは大歓迎です。前もって感謝します。

4

2 に答える 2

6

L1/L2 は必ずしも包括的ではなく、最後のレベルのキャッシュのみが包括的であることがわかっており、i7 では L3 になります。キャッシュラインは基本的なキャッシング要素であると言っているのは正しいです。新しいものを埋めるために(またはその単一のラインを無効にするときに)キャッシュライン全体をスローする必要があります。詳細については、こちらをご覧ください - http://www.tomshardware.com/reviews/Intel-i7-nehalem-cpu,2041-10.html

ラインが削除されると、実行されるアクションはその MESI 状態によって異なります (MESI とその派生物は、キャッシュの一貫性を維持するためのプロトコルです)。行が変更された場合 (「M」)、データは次のレベルのキャッシュに「書き戻される」必要があります (ミスの場合はそこに割り当てられるか、次のレベルに「ライトスルー」されます - 依存します)。キャッシュが保持するポリシーに基づいています)。最後のレベルのキャッシュに到達すると、包括的であるため、ヒットする必要があることに注意してください。最後のレベルのキャッシュからラインを削除する場合、メモリに書き込む必要があります。いずれにせよ、変更された行を書き戻すことに失敗すると、一貫性が失われ、誤った実行が行われる可能性が高くなります。

回線が変更されていない場合 (Invalid、Exclusive、または Shared)、CPU はライトバックを必要とせずに静かに回線をドロップする可能性があるため、帯域幅が節約されます。ちなみに、より複雑なキャッシュ プロトコル (MESIF や MOESI など) には、他にもいくつかの状態があります。

「キャッシュコヒーレンスプロトコル」をグーグルで検索すると、多くの説明が見つかります。より確実な情報源が必要な場合は、CPU アーキテクチャまたはキャッシュ設計の教科書を参照できます。個人的には、Hennessy&Patterson の「コンピュータ アーキテクチャ、定量的アプローチ」をお勧めします。キャッシュ パフォーマンスに関する章全体がありますが、ここでは少し話題から外れています。

小規模な更新: Skylake の時点で、一部の CPU (サーバー セグメント) には包括的 L3 がなくなり、非包括的 (増加した L2 をサポートするため) になりました。これは、通常、L3 はそれらのコピーを保持しないため、L2 からエージング アウトするときにクリーンな行も書き戻される可能性が高いことを意味します。

詳細: https://www.anandtech.com/show/11550/the-intel-skylakex-review-core-i9-7900x-i7-7820x-and-i7-7800x-tested/4

于 2013-10-17T15:39:06.237 に答える