メモリ階層と性能
ソフトウェアのプリフェッチ命令を入れるとき、どれだけ先のデータを読むか(プリフェッチの距離)についての説明として正しいものはどれか。
- A距離は短いほどよく、次の要素を読む直前に入れるのが最適である
- B距離は長いほどよく、ループで使う全データを最初にまとめて読んでおくのが最適である
- C短すぎても長すぎてもよくなく、ミスの時間とループ1回の時間から決める
答えと解説を見る
正解:C. 短すぎても長すぎてもよくなく、ミスの時間とループ1回の時間から決める
プリフェッチは、データが必要になるまでにメモリからの読み込みが終わっていなければ意味がありません。距離が短すぎると到着が間に合わず、長すぎるとキャッシュに入ったデータが使われる前に追い出されたり、キャッシュを汚したりします。目安は、ミスペナルティをループ1回の実行時間で割った回数だけ先を読むことです。直前に入れるだけでは待ち時間を隠せず、全データをまとめて読むとキャッシュに入りきりません。
- A. 直前では読み込みが間に合わず、待ち時間を隠せません。
- B. 全データを先に読むと、使う前に追い出されてしまいます。
- C. 正しい。間に合い、かつ追い出されない距離を、ミスの時間とループの時間から選びます。