「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%が費されていることが分かった。