5

これが間違ったスタック交換である場合は申し訳ありません。コンピューター アーキテクチャに役立つ可能性のある場所に最も近い場所のように思えました。コンピューター システムの宿題の問題で、次のように聞かれました。

Consider three direct mapped caches X, Y, and Z each interpreting an
8-bit address slightly differently according to the {tag:setIdx:byteOffset}
format specified. For each address in the reference stream, indicate whether the
access will hit (H) or miss (M) in each cache.

                  C1       C2     C3
Address Formats: {2:2:4} {2:3:3} {2:4:2}

Address References in Binary: 00000010, 00000100...

それぞれのアドレス参照がヒットするかミスするかを言うことになっていますが、どこから始めればよいかわかりません。

フォーマットについては、tag はキャッシュのブロック内のデータのタグを意味し、setIdx はキャッシュ内のさまざまなブロックを表すために与えられるビットの量を意味し、offset は選択できるブロック内の特定のバイトであると考えました。

当たり外れが分からないような気がします。コンパルソリー、キャパシティー、コンフリクトの3種類があると思っていました。既にキャッシュに何が入っているか分からない場合、どれが強制的なミスであるかをどのように知ることができますか? タグ形式からキャッシュの容量を知るにはどうすればよいですか?

ヒントやヒントをありがとう。

4

2 に答える 2

3

たとえば C1 には、setIdx 用に 2 ビット、byteOffset 用に 4 ビットがあります。

したがって、このキャッシュには 2^2 = 4 ブロック (00、01、10、および 11) が含まれ、各ブロックには 2^4 = 16 バイトが含まれます。

アドレス参照を C1 形式に分割できるようになりました: {00 00 0010}

デフォルトでキャッシュが空であると仮定すると、最初のルックアップでミスが発生します。ただし、キャッシュには、タグ「00」でロードされたブロック「00」が含まれます。

次の参照 {00 00 0100} はブロック "00" を検索します。タグも "00" であることがわかり、ヒットしました。

于 2012-04-30T02:38:00.187 に答える
1

私はあなたがヒットするとは思わない。アドレス 00 00 0100 は同じブロックを検索しますが、メモリ内の別のアドレスを検索します。直接マップされたキャッシュ ヒットは、連続した命令で同じブロック内のメモリ内の同じアドレスにアクセスしようとした場合にのみ発生します。メモリ内のアドレスは、ブロック番号ではなく、バイト アドレスで指定されます。ダイレクト マップ キャッシュは、ブロック内の同じアドレスにアクセスしようとしない限り、ブロックの内容を置き換えます。00 00 0100 が別の 00 00 0100 の前にある場合、ダイレクト マップ キャッシュでヒットします。

関連するキャッシュでは、メモリ アドレスはバイト アドレスではなくブロック番号で指定されるため、ここでヒットが生成されます。

ブロック番号は、floor(バイト アドレス/ブロックあたりのバイト数) mod (ブロック数) で指定されます。

于 2014-04-15T08:47:24.513 に答える