メモリ階層と性能
行列の積などで使われるループブロッキング(タイリング)の主な目的はどれか。
- Aキャッシュに収まる小さなブロックごとに計算し、データの再利用を増やすため
- Bループの回数を減らして、ループの終わりで実行する分岐命令の数を少なくするため
- C計算の順番を変えずに、使うメモリの総量を半分にするため
答えと解説を見る
正解:A. キャッシュに収まる小さなブロックごとに計算し、データの再利用を増やすため
大きな行列の積をそのまま計算すると、一度読み込んだ要素が再び使われる前にキャッシュから追い出され、何度も主記憶から読み直すことになります。ループブロッキングでは行列をキャッシュに収まる小さなブロックに分け、ブロックの中で計算をすませることで、読み込んだデータを何度も再利用し、容量ミスを大きく減らします。分岐命令を減らすのはループ展開の目的で、使うメモリの総量は変わりません。
- A. 正しい。キャッシュに収まる単位で計算し、データの再利用を増やします。
- B. 分岐を減らすのはループ展開の目的です。
- C. 計算の順番は変わり、使うメモリの総量は変わりません。