メモリ階層と性能

2次元配列の1行の大きさが4096バイト(2の累乗)のとき、列方向に要素をたどると、キャッシュの容量に余裕があってもミスが多くなることがある。その対策として効果があるものはどれか。

  1. A各行の末尾に詰め物を足し、行の大きさを2の累乗からずらす
  2. B配列の型を、同じ大きさの別の型に変える
  3. C配列全体を、大きな2の累乗のアドレス境界にそろえて置き直す
答えと解説を見る

正解:A. 各行の末尾に詰め物を足し、行の大きさを2の累乗からずらす

1行が4096バイトちょうどだと、列方向にたどる要素のアドレスはどれも4096の倍数ずつ離れ、インデックスのビットが同じになって、同じセットに集中します。連想度より多い行をたどると、容量に余裕があっても追い出し合う競合ミスが起こります。各行に1ライン分程度の詰め物(パディング)を足せば、要素ごとに対応するセットがずれて分散します。2の累乗のアドレスにそろえても問題は変わらず、同じ大きさの型に変えても効果はありません。

  • A. 正しい。行の大きさをずらすと、要素が別々のセットに分散します。
  • B. 同じ大きさの型では、アドレスの並びは変わりません。
  • C. 2の累乗にそろえても、同じセットに集中する問題は残ります。
この分野を解く 分野ページへ

メモリ階層と性能のほかの問題

  1. 主記憶のDRAMへのアクセスにかかる時間は、L1キャッシュのヒット時間のおよそ何倍か。(一般的なPCやサーバーのCPUの場合)
  2. キャッシュの各ラインに付けられる有効ビット(valid bit)の役割として正しいものはどれか。
  3. 小容量のフルアソシアティブ方式のバッファに、L1キャッシュから追い出されたラインを一時的に保持するビクティムキャッシュの主な効果はどれか。
  4. L1キャッシュの下にL2キャッシュを置く多段のキャッシュで、L2キャッシュの主な役割はどれか。
  5. 下位のキャッシュ(L2など)が上位のキャッシュ(L1)の内容をすべて含むインクルーシブ方式の特徴として正しいものはどれか。