メモリ階層と性能

行列の積などで使われるループブロッキング(タイリング)の主な目的はどれか。

  1. Aキャッシュに収まる小さなブロックごとに計算し、データの再利用を増やすため
  2. Bループの回数を減らして、ループの終わりで実行する分岐命令の数を少なくするため
  3. C計算の順番を変えずに、使うメモリの総量を半分にするため
答えと解説を見る

正解:A. キャッシュに収まる小さなブロックごとに計算し、データの再利用を増やすため

大きな行列の積をそのまま計算すると、一度読み込んだ要素が再び使われる前にキャッシュから追い出され、何度も主記憶から読み直すことになります。ループブロッキングでは行列をキャッシュに収まる小さなブロックに分け、ブロックの中で計算をすませることで、読み込んだデータを何度も再利用し、容量ミスを大きく減らします。分岐命令を減らすのはループ展開の目的で、使うメモリの総量は変わりません。

  • A. 正しい。キャッシュに収まる単位で計算し、データの再利用を増やします。
  • B. 分岐を減らすのはループ展開の目的です。
  • C. 計算の順番は変わり、使うメモリの総量は変わりません。
この分野を解く 分野ページへ

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

  1. 上のようにx座標だけを合計する処理を、配列の構造体(各成分を別々の配列にする形)に書き換えると速くなりやすい理由はどれか。
  2. キャッシュを命令用(Iキャッシュ)とデータ用(Dキャッシュ)に分けたL1キャッシュの主な利点はどれか。
  3. ページサイズ4 KB、ラインサイズ64バイトのシステムで、L1キャッシュを仮想インデックス・物理タグ(VIPT)方式にし、インデックスとオフセットをページ内のビットだけで構成したい。8ウェイ・セットアソシアティブなら、キャッシュの容量は最大いくらにできるか。
  4. L1キャッシュに仮想インデックス・物理タグ(VIPT)方式がよく使われる主な理由はどれか。
  5. キャッシュのヒット時間が2サイクル、ミス率が4%、ミスペナルティが150サイクルのとき、平均メモリアクセス時間は何サイクルか。