Intel Core IvyBridge プロセッサ、Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz (L1-32KB、L2-256KB、L3-8MB) を使用しています。L3 が包括的であり、複数のコア間で共有されていることはわかっています。自分のシステムに関して次のことを知りたい
パート1 :
- L1 は包括的か排他的か?
- L2 は包括的か排他的か?
パート2 :
L1 と L2 の両方が含まれる場合、L2 のアクセス時間を見つけるために、まず L2 キャッシュ (256KB) よりも大きいサイズの配列 (1MB) を宣言し、次に配列全体へのアクセスを開始して L2 キャッシュにロードします。その後、キャッシュ ライン サイズが 64B であるため、64B のストライドで開始インデックスから終了インデックスまで配列要素にアクセスします。より正確な結果を得るために、このプロセス (index 、start-end の配列要素へのアクセス) を複数回、たとえば 100 万回繰り返し、平均を取ります。
このアプローチが正しい結果をもたらす理由を次のように理解しています。L2 キャッシュ サイズを超えるサイズの配列にアクセスすると、配列全体がメイン メモリから L3 にロードされ、次に L3 から L2 にロードされ、次に L2 から L1 にロードされます。アレイ全体の最後の 32KB は、最近アクセスされたため、L1 にあります。包括的なプロパティとキャッシュの一貫性により、アレイ全体が L2 および L3 キャッシュにも存在します。ここで、L1 キャッシュではなく L2 キャッシュにある開始インデックスから再び配列へのアクセスを開始すると、キャッシュ ミスが発生し、L2 キャッシュからロードされます。このようにして、配列全体のすべての要素に必要なアクセス時間が長くなり、合計で配列全体の合計アクセス時間が得られます。単一のアクセスを取得するには、合計アクセス数の平均をとります。
私の質問は -私は正しいですか?
前もって感謝します 。