2013年8月2日金曜日

プロファイリング結果をグラフィックス表示

gprof による解析結果は、有益ではあるがちょっと見づらいので、グラフィックス表示方法を探してみた。
すると、valgrind + gprof2dot.py + graphviz という3段で、以下のような表示をすることができた。





gprof の場合は、複数の関数から同一の関数を呼び出した場合、呼び出し先の関数の合計だけが表示されて呼び出し元からどれくらい来るのかが分かりにくかった。
たとえば、func1() と func2() の両方から func3() を呼び出している場合に、func1 と func2 がどれだけ func3 に依存しているかが分かりにくかった。
今回の方法だと、こういった情報も分かるので解析が便利である。
ただ、valgrind を使うので、gprof に比べるとプロファイリングが10倍以上時間がかかるようになる。
(gprof でも gprof2dot は名前が示す通り処理できるのだが、自分がやった範囲では valgrind のときに上の func3 についてなどの情報を得られてない。)

具体的な方法としては、
1. valgrind を callgrind で実行する
$ valgrind --tool=callgrind ./sdpa-c6 example1.dat-s example1.result
2. gprof2dot.py で結果を処理し、さらに graphviz で画像に変換する
$ ./gprof2dot.py -f callgrind -w callgrind.out.[プロセスID番号] | dot -Tpng -o a.png

ここで、gprof2dot.py は 
の Download から入手できる。valgrind, graphviz は Debian 系なら
# apt-get install valgrind graphviz
でインストールできる。

今日の作業内容:SDPA-C チェック 3h + センサーのデータ再チェック 2h
今日のランチ:シッダルータ ダルカレー
明日の予測作業時間:5h


0 件のコメント:

コメントを投稿