Mae向きなブログ

Mae向きな日記のブログ版。ようやくこちらに移行してきました。

プロファイリング

amazon:プログラミング作法」(ASCII)という本の中でプロファイリングについて書いてあった。「プロファイル」とは、プログラムがどこで時間を費したかを示す統計のことを指すそうであり、「プロファイリング」は、プログラム中のホットスポットを見付つけるのに効果的な手段となる。

早速、試してみた。手頃なプログラムがあればよかったのだが、見当たらないので、以前「既約分数クイズ」*1で作ったプログラムを使用した。

方法は、以下のとおり。(コンパイル時に-pgオプションを付ける)

% gcc -pg link_farey.c -o link_farey
% ./link_farey 
Input Number --> 1000
(出力は省略)
% gprof ./link_farey

実行結果は以下のようになった。

Flat profile:

Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total
 time   seconds   seconds    calls  ms/call  ms/call  name
 66.67      0.04     0.04        1    40.00    40.00  farey
 33.33      0.06     0.02        1    20.00    20.00  print_fnode_link
  0.00      0.06     0.00   304193     0.00     0.00  make_node

上記より、farey関数の実行に全体の実行時間の66.67%が費されていることが分かった。