88

このフォーラムの以前の質問から、ほとんどのメモリシステムでは、L1キャッシュはL2キャッシュのサブセットであり、L2から削除されたエントリはすべてL1からも削除されることを学びました。

だから今私の質問は、L2キャッシュのエントリに対応するL1キャッシュのエントリをどのように決定するかです。L2エントリに保存される情報は、タグ情報のみです。このタグ情報に基づいて、addrを再作成すると、L1キャッシュとL2キャッシュの行サイズが同じでない場合、L1キャッシュ内の複数の行にまたがる可能性があります。

アーキテクチャは本当に両方のラインをフラッシュすることを気にしますか、それとも同じラインサイズでL1とL2キャッシュを維持するだけですか。

これはポリシーの決定であることは理解していますが、一般的に使用されている手法について知りたいと思います。

4

4 に答える 4

90

キャッシュラインのサイズは(通常)64バイトです。

さらに、プロセッサキャッシュに関するこの非常に興味深い記事をご覧ください: プロセッサキャッシュ効果のギャラリー

次の章があります。

  1. メモリアクセスとパフォーマンス
  2. キャッシュラインの影響
  3. L1およびL2キャッシュサイズ
  4. 命令レベルの並列性
  5. キャッシュの関連性
  6. 誤ったキャッシュライン共有
  7. ハードウェアの複雑さ
于 2013-03-01T16:57:47.817 に答える
89

Core i7では、L1、L2、およびL3のラインサイズは同じです。つまり、64バイトです。これにより、包括的プロパティと一貫性の維持が簡単になると思います。

次の10ページを参照してください:https ://www.aristeia.com/TalkNotes/ACCU2011_CPUCaches.pdf

于 2013-03-11T07:19:47.390 に答える
25

厳密に包括的キャッシュ階層でキャッシュブロックサイズを処理する最も一般的な手法は、包含プロパティが適用されるすべてのレベルのキャッシュに同じサイズのキャッシュブロックを使用することです。これにより、高レベルのキャッシュがより大きなブロックを使用する場合よりもタグのオーバーヘッドが大きくなります。これは、チップ領域を使用するだけでなく、一般に高レベルのキャッシュが段階的アクセス(データ部分にアクセスする前にタグがチェックされる)を使用するため、レイテンシを増加させる可能性があります。ただし、設計がいくらか簡素化され、データの未使用部分による無駄な容量が削減されます。余分な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が含まれていました。])

于 2014-08-13T15:00:33.760 に答える
1

通常、メインメモリへの1回のアクセスで、64バイトのデータと8バイトのパリティ/ ECC(どちらが正確かは覚えていません)にアクセスします。また、さまざまなメモリレベルでさまざまなキャッシュラインサイズを維持することはかなり複雑です。キャッシュラインのサイズは、他の何よりも、そのアーキテクチャの単語の配置サイズとより相関していることに注意する必要があります。これに基づいて、キャッシュラインサイズがメモリアクセスサイズと異なる可能性はほとんどありません。現在、パリティビットはメモリコントローラ用です。したがって、キャッシュラインサイズは通常64バイトです。プロセッサは、実際にはレジスタを超えてほとんど制御しません。コンピューターで行われている他のすべてのことは、CPUパフォーマンスを最適化するためにハードウェアを組み込むことです。その意味でも、

于 2014-08-13T11:13:48.803 に答える