web-dev-qa-db-ja.com

ダイレクトマップキャッシュと完全連想キャッシュの違い

2つのキャッシュの主な違いを十分に理解できず、誰かが私を助けることができるかどうか疑問に思っていましたか?

完全連想キャッシュを使用すると、タグ配列の任意の行にアドレスを格納でき、直接マップされたキャッシュは1行に1つのアドレスしか持つことができないことを知っています。

しかし、それは私が知っているすべてについてです。

10
madcrazydrumma

要するに、あなたは基本的にあなたの質問に答えました。これらはキャッシュを編成する2つの異なる方法です(別の方法はn-way set associativeで、両方を組み合わせて、実際のCPUで最もよく使用されます) )。

Direct-Mapped Cacheは単純です(1つのコンパレータと1つのマルチプレクサのみが必要です)。その結果、より安価で高速に動作します。任意のアドレスを指定すると、キャッシュ内の単一のエントリがどこにあるかを簡単に識別できます。 DMキャッシュを使用する場合の大きな欠点は、2つの異なるアドレスが1つのエントリに対応する場合、conflict missと呼ばれます。キャッシュ:キャッシュが大きく、多くの古いエントリが含まれている場合でも、キャッシュ内の位置はアドレスによって事前に決定されているため、それらを単純に排除することはできません。

フルアソシエイティブキャッシュははるかに複雑であり、任意のエントリにアドレスを保存できます。そのための価格があります。特定のアドレスがキャッシュにあるかどうかを確認するには、現在のエントリ(正確にはタグ)を比較する必要がありますall。さらに、一時的な局所性を維持するために、立ち退きポリシーが必要です。通常、LRUの近似(最近使用された)が実装されますが、スキームに追加のコンパレータとトランジスタも追加され、もちろん時間がかかります。

完全な連想キャッシュは、小さなキャッシュには実用的です(たとえば、一部のIntelプロセッサのTLBキャッシュは完全に連想的です)が、これらのキャッシュは小さく、本当に小さいです。せいぜい数十のエントリについて話しているだけです。

L1iおよびL1dキャッシュでさえも大きく、組み合わせたアプローチが必要です。キャッシュはセットに分割され、各セットは「ウェイ」で構成されます。セットは直接マップされ、そのセット内で完全に結合されます。 「ウェイ」の数は通常小さく、たとえばIntel Nehalem CPUには4ウェイ(L1i)、8ウェイ(L1d、L2)、および16ウェイ(L3)セットがあります。 Nウェイセットアソシアティブキャッシュは、時間的な局所性の問題をほぼ解決し、実際に使用される複雑な問題ではありません。

UC Berkeleyによる2011年のコース「Computer Science 61C」を強くお勧めします。 YouTubeで無料で入手可能 。他のものに加えて、メモリ階層とキャッシュの実装に関する3つの講義が含まれています。

17
Maxim

このタイプのキャッシュのダイレクトマップキャッシュは、セットごとに1行あります。つまり、最初の行Aのexは別の行に座っています。Bは座っています。ブロックBのどの行に座っているのかわからない

0
shubhang drolia