キャッシュメモリのロジックを学習しています。正しく理解したことを確認できますか。タグフィールドにキャッシュメモリがある場合 16 ビットがあり、セットフィールドには 10 ビットで、ブロックフィールドのバイトが 6 ビットである場合、その情報からのみ推測できます。容量は128kバイトであり、ブロックフィールドのバイトから2⁶= 64バイトであるため、ブロックサイズ64バイトに関連付けられた双方向セットです。2¹⁰= 1024ですが、他の関連付け番号を持つ他の容量で要件を満たすことができますか?
式は次のとおりです
ブロック数=容量/ブロックサイズ
セット数=ブロック数/#associativity
したがって、 4ウェイへの関連付けを2倍にすることはできましたが、4ウェイキャッシュでは要件を満たすことができませんでした。 uldには、setフィールドに別のビット数が必要です。
正しく理解できましたか?
回答
この図は、連想キャッシュがどのように機能するかを理解するのに役立ちますか構造的に?
簡単に言うと、ブロックオフセットビットによってブロックサイズが決まります(キャッシュ行にあるバイト数、必要に応じて列数)。インデックスビットは、各セットに含まれる行数を決定します。そのため、キャッシュの容量は2 ^(blockoffsetbits + indexbits)*#setsです。この場合、それは2 ^(4 + 4)* 4 = 256 * 4 = 1キロバイトです。
同じサイズのキャッシュ(容量)の場合、4ウェイから2ウェイに移行する場合-方法セット連想、双方向連想、各セットの行を2倍にするか、各セットの列を2倍にする、つまりキャッシュラインの数を2倍にするか、ブロックサイズを2倍にすることでこれを行うことができます。
行数を2倍にすることを選択した場合、12ビットアドレスが5ビットインデックスと4ビットブロックオフセットに分割され、3ビットタグが残ることになります。
ブロックサイズを2倍にすることを選択した場合、12ビットアドレスが4ビットインデックスと5ビットブロックオフセットに分割され、3ビットタグが残ります。
繰り返しになりますが、連想キャッシュの管理式は次のとおりです。
Cache Capacity = (Block Size in Bytes) * (Blocks per Set) * (Number of Sets) Index Bits = LOG2(Blocks per Set) Block Offset Bits = LOG2(Block Size in Bytes) Tag Bits = (Address Bits) - (Index Bits) - (Block Offset Bits)
最初に述べた例では、私はしません。 “それぞれのアドレスビットフィールドのサイズに基づいて、上記の仮定をせずにキャッシュのサイズを推測できると思います結合性。 が双方向の関連付けである場合、次のように言うことができます。
キャッシュ容量=(2 ^ 6)*(2 ^ 10)*(2)= 2 ^ 18 = 2 ^ 8キロバイト= 256キロバイト。どうやって128キロバイトを思いついたのかわかりません。それが一方向の連想(直接マッピング)の場合に当てはまります。
128kB(2 ^ 17バイト)のキャッシュ容量の場合、
2^17 = 2^6 * (Blocks per Set) * 4 Blocks per Set = 2^17 / 2^6 / 2^2 = 2^9 = 512
…と言うことで、64バイトのブロックサイズの4ウェイ連想キャッシュを作成できます。したがって、9つのインデックスビットと4つのブロックオフセットビットを割り当てます。 、および残り(19)個のタグビット。