性能評価・プロファイリング
配列の大きさを少しずつ大きくしながら、配列を繰り返し読む処理の1要素あたりの時間を測ると、ある大きさごとに時間が段階的に増える。その理由として正しいものはどれか。
- A配列が大きくなるほど、CPUの周波数が必ず下がるから
- B配列がL1・L2・L3のキャッシュの容量を順に超えるたびに、データがより遅い記憶から読まれるようになるから
- C配列の大きさによって、足し算の結果が変わるから
答えと解説を見る
正解:B. 配列がL1・L2・L3のキャッシュの容量を順に超えるたびに、データがより遅い記憶から読まれるようになるから
配列が小さいうちはL1キャッシュに収まって速く読めますが、L1の容量を超えるとL2から、さらにL2やL3を超えると主記憶から読むことになり、そのたびに1要素あたりの時間が段階的に増えます。この測り方で、キャッシュの容量やそれぞれの速さをおおまかに調べられます。プログラムが繰り返し使うデータの大きさ(ワーキングセット)をキャッシュに収めることが、性能に大きく効く理由も分かります。
- A. 周波数は配列の大きさで決まりません。
- B. 正しい。メモリ階層の容量が段差として表れます。
- C. 計算の結果は変わりません。