シナリオ:
- キャッシュ (L1) サイズ (
CS
): 32kB - ラインサイズ(
LS
):64B - 結合性 (
A
): 8 - セットサイズ(
SS
):512B(A
※LS
) - セット (
S
): 64 (C
/SS
) - 読み取り/書き込みオブジェクト (
O
) のサイズがLS
仮定(無効な場合は修正してください):
- 仮想メモリ ブロック (サイズ 4kB (
SS
*A
) で示されるB
) は、モジュロのような方法でセットにマップされます。つまり、アドレス0x0 : 0xFFFF
(ブロック インデックス (BI
) 0) はセット 0 にマップされ、0x1000 : 0x1FFF
(BI
1) は 1 にマップされます。 - 読み取り/書き込みの要求 (非一時的な書き込み/読み取りは使用されません) では、特定のアドレス
A
を見つけBI
て、割り当てられたセットに移動する必要があります。たとえば、A
= 0x4600A はBI
= 70 になります。これBI
はセット 6 (BI
%S
) にマッピングされます。 - オブジェクト ( ) を適切に (ミスアライメントなしで) r/w
O
してキャッシュするには、 のアライメントLS
が必要です。
質問:
- はキャッシュ内でシリアルに整列されます
O
か、それとも (たとえば) 空きスロット 0 & 1 & 2 の代わりに 0 & 4 & 5 を使用できますか? O
パーティション化されたキャッシュを取得するコスト (ペナルティ) は?O
が複数の に分割されていないと仮定しB
ます。- 上記と同じ質問ですが、 が
O
2 つに配置されている場合は、B
2 つのセットが使用されます。 - サイズが(512B)
O
より大きい場合はどうなりますか?SS
データを L2 に移動し、段階的にデータを L1 に移動しますか? 他のセットを使用しますか? - L2 (さらに言えば L3) がすべてのデータに対して小さすぎる場合はどうなるでしょうか?