プロファイリングしてみた

ぱっと見で速くなりそうなところを直したところで、Solarisでプロファイリングしてみました。
Linuxを使わなかったのは、プロファイリング用にビルドされたバイナリがFedoraのパッケージにはなさそうだったからで、Solaris(Nexenta)ではソースからビルドする設定になっていてすぐに試せただけです。


プロファイリングするには、bjamでdebugやreleaseの代わりにprofileを指定してビルド、実行後にgmon.outというファイルができるので「gprof 実行ファイル名」とします。
で、結果ですが、プロファイル付きなのに38秒とかで終わってて、Windowsの場合と全然違います。これでは参考になりません。
仕方なく、Cygwinでやり直したところ、「no time accumulated」というメッセージが出力され、全ての関数の所要時間が0秒になってしまいました。


ちょっとググってみると、
http://www.ibm.com/developerworks/jp/linux/library/l-gnuprof/index.html
とかが見つかって、どうもプログラムそのものよりI/Oで時間を食っているようです。
bjamのソースを思い出してみると、確かstat()やreaddir()の結果をキャッシュしていたはずなので、試しにこの処理を入れてみようと思います。