メモリ階層と性能

ソフトウェアのプリフェッチ命令を入れるとき、どれだけ先のデータを読むか(プリフェッチの距離)についての説明として正しいものはどれか。

  1. A距離は短いほどよく、次の要素を読む直前に入れるのが最適である
  2. B距離は長いほどよく、ループで使う全データを最初にまとめて読んでおくのが最適である
  3. C短すぎても長すぎてもよくなく、ミスの時間とループ1回の時間から決める
答えと解説を見る

正解:C. 短すぎても長すぎてもよくなく、ミスの時間とループ1回の時間から決める

プリフェッチは、データが必要になるまでにメモリからの読み込みが終わっていなければ意味がありません。距離が短すぎると到着が間に合わず、長すぎるとキャッシュに入ったデータが使われる前に追い出されたり、キャッシュを汚したりします。目安は、ミスペナルティをループ1回の実行時間で割った回数だけ先を読むことです。直前に入れるだけでは待ち時間を隠せず、全データをまとめて読むとキャッシュに入りきりません。

  • A. 直前では読み込みが間に合わず、待ち時間を隠せません。
  • B. 全データを先に読むと、使う前に追い出されてしまいます。
  • C. 正しい。間に合い、かつ追い出されない距離を、ミスの時間とループの時間から選びます。
この分野を解く 分野ページへ

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

  1. 上のループでintが4バイト、キャッシュラインが64バイト、配列はキャッシュに入っておらず先頭がラインの境界にそろっているとき、プリフェッチがなければ配列の読み込みのミス率はいくらか。
  2. 行列の積などで使われるループブロッキング(タイリング)の主な目的はどれか。
  3. 上のようにx座標だけを合計する処理を、配列の構造体(各成分を別々の配列にする形)に書き換えると速くなりやすい理由はどれか。
  4. キャッシュを命令用(Iキャッシュ)とデータ用(Dキャッシュ)に分けたL1キャッシュの主な利点はどれか。
  5. ページサイズ4 KB、ラインサイズ64バイトのシステムで、L1キャッシュを仮想インデックス・物理タグ(VIPT)方式にし、インデックスとオフセットをページ内のビットだけで構成したい。8ウェイ・セットアソシアティブなら、キャッシュの容量は最大いくらにできるか。