メモリ階層と性能

時間的局所性の例として最も適切なものはどれか。

  1. A配列の要素を先頭から順番に1回ずつ読む
  2. Bループの中で同じ合計用の変数を何度も更新する
  3. C毎回ランダムなアドレスのデータを1回だけ読む
答えと解説を見る

正解:B. ループの中で同じ合計用の変数を何度も更新する

時間的局所性は、一度使ったデータを近いうちにまた使う性質で、ループ内で繰り返し読み書きする変数が典型例です。こうしたデータはキャッシュやレジスタに残っている間に再利用されるため、アクセスが速くなります。配列を先頭から順に読むのは、近くのアドレスを続けて使う空間的局所性の例で、時間的局所性とは別の性質です。ランダムに1回だけ読むアクセスには、どちらの局所性もほとんどありません。

  • A. 先頭から順に読むのは空間的局所性の例です。
  • B. 正しい。同じ変数を短い間に何度も使うのが時間的局所性です。
  • C. ランダムに1回ずつ読むアクセスには局所性がほとんどありません。
この分野を解く 分野ページへ

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

  1. C言語の2次元配列a[i][j]を上のように内側のループをjにして走査すると、内側をiにするより速くなりやすい。その理由はどれか。
  2. アドレスが32ビット、容量32 KB、ラインサイズ64バイトのダイレクトマップ方式のキャッシュで、タグは何ビットになるか。
  3. アドレスが32ビット、容量32 KB、ラインサイズ64バイトの4ウェイ・セットアソシアティブ方式のキャッシュのセット数はいくつか。
  4. フルアソシアティブ方式のキャッシュで、アドレスのうちインデックス(セットを選ぶ部分)に使うビット数はどれか。
  5. L1キャッシュのヒット時間が1 ns、ミス率が5%、L2キャッシュのヒット時間が10 ns、L2のローカルミス率が20%、主記憶のアクセス時間が100 nsのとき、平均メモリアクセス時間はいくらか。