3

一般的なキャッシュアドレスには、次の3つのフィールドがあります。

Tag | Set | Offset

仮想アドレスをキャッシュエントリに解決するプロセスは、検索するデータが含まれているセットを特定し、タグ(仮想アドレスの一部)を使用してマルチウェイキャッシュの明確化を行う必要があります(各セットには複数のエントリが含まれる場合があります) )。

私の質問は、セットはどのように決定されるのかということです。そして、仮想アドレスの一部だけをタグとして使用することで、2つの類似した値の間のキャッシュヒットを一意に判別できることを誰が保証しますか?

4

1 に答える 1

4

アドレスのビットは、次の 3 つのグループに分けられます。

  tag  | set index | Block offset
t bits |   s bits  |    b bits

キャッシュ内のブロックのサイズがBバイトの場合b = (log2 B) bits、ブロック オフセットを指定する必要があります。

キャッシュに S セットがある場合、s = (log2 S)ビットがセット インデックスに使用されます。また、キャッシュが完全に関連付けられている場合、セットは と のみでありS = 1s = 0セット インデックスにビットは使用されません。

残りのビットはタグに使用され、次を使用してt計算できます。t = NUM_BITS - s - b

これにより、任意のアドレスを対応するキャッシュ ラインにマップできることが保証され、キャッシュ ラインを見るだけvalid bitで、キャッシュにアドレスがあるかどうかを確認できます。プログラムで空間データの局所性を活用するために、通常、キャッシュ ラインのサイズはワード サイズよりも大きいことに注意してください。

要求されたアドレスがキャッシュ内に見つからない場合、キャッシュに取り込まれるデータ ブロックの開始アドレスを計算する必要があります。

範囲のサイズは、常にキャッシュ ブロック サイズと同じです。開始アドレスは、アドレスのブロック オフセット ビットをゼロにすることによって計算されます。1s終了アドレスは、アドレスのブロック オフセット ビットをすべて使用して計算されます。

LRUキャッシュの結合性とエビクション スキーム ( vs ) に応じて、LFUこの新しいデータ ブロックが格納されるセット内の行が決定され、入力されます。

于 2013-03-10T21:29:48.673 に答える