厳密に包括的キャッシュ階層でキャッシュブロックサイズを処理する最も一般的な手法は、包含プロパティが適用されるすべてのレベルのキャッシュに同じサイズのキャッシュブロックを使用することです。これにより、高レベルのキャッシュがより大きなブロックを使用する場合よりもタグのオーバーヘッドが大きくなります。これは、チップ領域を使用するだけでなく、一般に高レベルのキャッシュが段階的アクセス(データ部分にアクセスする前にタグがチェックされる)を使用するため、レイテンシを増加させる可能性があります。ただし、設計がいくらか簡素化され、データの未使用部分による無駄な容量が削減されます。余分な32ビットタグの領域ペナルティを補うために、128バイトのキャッシュブロック内の未使用の64バイトチャンクの大部分を占めることはありません。さらに、より広い空間的局所性を利用することによるより大きなキャッシュブロック効果は、比較的単純なプリフェッチによって提供することができます。
あまり一般的ではない手法で、キャッシュブロックをセクターに分割します。セクターサイズを低レベルキャッシュのブロックサイズと同じにすることで、高レベルキャッシュの各セクターに独自の有効なビットがあるため、過剰な逆無効化の問題を回避できます。(有効性だけでなく、各セクターのすべてのコヒーレント状態メタデータを提供することで、ブロック内の少なくとも1つのセクターがダーティ/変更されておらず、コヒーレンスオーバーヘッドがある場合に、過度のライトバック帯域幅の使用を回避できます(たとえば、1つのセクターが共有状態にあり、別のセクターが排他的状態では、排他的状態のセクターへの書き込みには、コヒーレントトラフィックが含まれない可能性があります。ディレクトリコヒーレンスではなくスヌーピーが使用されている場合]。)
タグがプロセッサチップ上にあるがデータがオフチップである場合、セクター化されたキャッシュブロックによる領域の節約は特に重要でした。明らかに、データストレージがプロセッサチップのサイズに匹敵する領域を占める場合(これは不合理ではありません)、64バイトブロックの32ビットタグはプロセッサ領域の約16分の1(〜6%)を占めますが、128-バイトブロックは半分の時間がかかります。(2009年に導入されたIBMのPOWER6 +は、おそらくオンプロセッサーチップタグとオフプロセッサーデータを使用する最新のプロセッサーです。IBMが行ったように、高密度の組み込みDRAMと低密度のSRAMにデータを格納すると、これは誇張されます。効果。)
Intelは、小さいユニットを指すのに「キャッシュライン」を使用し、大きいユニットを指すのに「キャッシュセクター」を使用することに注意してください。(これが、説明で「キャッシュブロック」を使用した理由の1つです。)Intelの用語を使用すると、レベルが厳密に包括的、厳密に排他的、または使用されているかどうかに関係なく、キャッシュラインのサイズがキャッシュのレベル間で異なることは非常にまれです。その他の包含ポリシー。
(厳密な除外では、通常、上位レベルのキャッシュを犠牲キャッシュとして使用し、下位レベルのキャッシュからの排除が上位レベルのキャッシュに挿入されます。明らかに、ブロックサイズが異なり、セクター化が使用されていない場合、排除には残りの大きなブロックはどこかから読み取られ、下位レベルのキャッシュに存在する場合は無効になります。[理論的には、厳密な除外は、L1エビクションがL2をバイパスしてL3に移動し、L1/L2キャッシュミスが発生する柔軟性のないキャッシュバイパスで使用できます。 L1またはのいずれかに割り当てられますL2、特定のアクセスのためにL1をバイパスします。私が知っている実装に最も近いのは、浮動小数点アクセスのためにItaniumがL1をバイパスすることです。ただし、正しく思い出せば、L2にはL1が含まれていました。])