VTune 体験記

こないだのアドバイスに従って、Intel 製プロファイラ VTune の体験版を試してみた。生協の購買部でみるたびに気にはなっていたが、個人で衝動買いする値段ではない。


使ってみた感想としては、かなりよかった。流石。ちゃんと説明を読んでないんだけど、全部の命令を追うのではなくて適当な間隔をあけてどこを実行しているのか sampling しているぽい。おかげで、プロファイルをとるのときの実行時間と、実際の実行時間に差がなく、信頼に足る結果を得られる。コンパイルのし直しも必要ない。以前試した別の商用プロファイラの体験版(だったか、フリーのプロファイラだったか)は全命令を追うので、実際のバイナリより10倍時間のかかるバイナリを生成して、プロファイル結果も全く信用ならないモノだった。再コンパイルも必要で、使い勝手もさほどよくない。結局、関数の呼び出し回数を測る程度にしか使えず、ボトルネックがほとんどなくなってしまってからは使っていなかった。

さて、肝心の実行結果だが、来るところまで来たかという結果。一番時間がかかっているのが置換表から引いてくるところで、その次が flip のための関数を関数ポインタの配列から引いてくるところ。結局、ボトルネックはキャッシュミスだということ。実際は flip 関数が 64 個あるので、全部足したらそれが一番多いとは思うのだが、アレはあれ以上どうしようもない。置換表は下から7手まで使ってないので、呼び出し回数はそんなに多くない。置換表は L2 にのらないのが原因、flip は多分 L2 にのるけど回数が多いのが原因。ボトルネックといっても、前者でも全体の 1 割りにも満たない。2つあわせて 15% 程度だ。

もう一つの目的。VC2003 と VC2005 の比較。結局、上記の特徴は同じで、極端な違いは見られなかった。少し気になるのは、置換表の処理が VC2003 よりも時間がかかっているところ。あと、memory の _Uninit_fill_n の実行時間に有意な差がみられるが、これはなんだろう? どうも、両方とも vector がらみっぽいが、するとやはり vector の変更による悪影響なのだろうか。まだちゃんとみてないけど、それ以外の処理は clock 単位でだいたい一致している。が、これだけだと全体の3割近い2秒の差には足りない気がするなぁ。

VTune を買ってもいいなぁとは思ったモノの、対象がオセロだけとなると 3 万円は微妙だ。研究用途で買うなら Linux 版だろう。リモート実行のプロファイルとかもできるらしい。すごい。