性能評価・プロファイリング

配列の大きさを少しずつ大きくしながら、配列を繰り返し読む処理の1要素あたりの時間を測ると、ある大きさごとに時間が段階的に増える。その理由として正しいものはどれか。

  1. A配列が大きくなるほど、CPUの周波数が必ず下がるから
  2. B配列がL1・L2・L3のキャッシュの容量を順に超えるたびに、データがより遅い記憶から読まれるようになるから
  3. C配列の大きさによって、足し算の結果が変わるから
答えと解説を見る

正解:B. 配列がL1・L2・L3のキャッシュの容量を順に超えるたびに、データがより遅い記憶から読まれるようになるから

配列が小さいうちはL1キャッシュに収まって速く読めますが、L1の容量を超えるとL2から、さらにL2やL3を超えると主記憶から読むことになり、そのたびに1要素あたりの時間が段階的に増えます。この測り方で、キャッシュの容量やそれぞれの速さをおおまかに調べられます。プログラムが繰り返し使うデータの大きさ(ワーキングセット)をキャッシュに収めることが、性能に大きく効く理由も分かります。

  • A. 周波数は配列の大きさで決まりません。
  • B. 正しい。メモリ階層の容量が段差として表れます。
  • C. 計算の結果は変わりません。
この分野を解く 分野ページへ

性能評価・プロファイリングのほかの問題

  1. プログラムのCPUでの実行時間を表す基本の式として正しいものはどれか。
  2. 10億個の命令を実行するプログラムを、平均CPIが2、クロック周波数が2 GHzのCPUで実行した。実行時間はいくらか。
  3. CPUの設計の変更で、クロックの周波数は1.5倍になったが、CPIも1.2倍に増えた(命令数は同じ)。実行の速さは元の何倍になるか。
  4. コンパイラの新しい最適化で、実行する命令の数は20%減ったが、平均CPIが10%増えた(周波数は同じ)。この最適化の効果として正しいものはどれか。
  5. あるプログラムの命令の割合が、整数の演算50%(CPI 1)、ロードとストア30%(CPI 2)、分岐20%(CPI 5)だった。平均CPIはいくらか。