プロファイラーを使おうとしてマイクロソフトのヘルプを見ながら格闘していたら、いつのまにかガイド付き最適化をやっていた。な…何を言ってるのかわからねーと思うが、おれも何をしたかったのか途中からわからなくなった…頭がどうにかなりそうだった…(AA略
---
忘れないように防備録 【Whidbey】Visual Studio 2005スレ Part2より
166 名前:デフォルトの名無しさん:2005/06/02(木) 13:46:34
>>114のリンク時コード生成 (LTCG)の説明に>たとえば、従来のコンパイルおよびリンクを行う際、
>コンパイラは関数をソース ファイル foo.cpp からソース ファイル bar.cpp にインラインできませんでした。とある。これから考えるにインライン関数をヘッダにじゃなくてCPPファイルに書いた場合でも
ちゃんとインライン展開してくれるんじゃないのか?167 名前:114:2005/06/02(木) 14:07:38
>>166
おっしゃるのはリンク時の大域最適化(WPO?)ですね。
それはガイド付き最適化(PGO)とは別物(内部的には無関連ではないらしいけど)WPOはVC7にもあって、ファイルをまたいだインライン展開やレジスタ割付の最適化を行うもの。
PGOはさらに、実行時の情報を集めて(一度ユーザーがアプリを操作する)、頻繁に通るコードを
条件分岐の前に持ってきたり、呼び出される関数と呼び出し側を近くに配置してキャッシュ効率を
あげたりするものらしい。言うのは簡単だが、実際すごい技術だと思う。ものによるが、ほんとに+30%、WPOの段階から
さらに早くなる。
168 名前:デフォルトの名無しさん:2005/06/02(木) 14:36:27
>>166
しかも、プロファイル情報に基づいてinline展開するか決めてるようなんで、
OBJファイルごとにinlineするかしないかが変わるってことだから
これからのソースは、ちょっと大きめの関数はinlineしないほうがいいのかも。あと、なんか勘違いしている人がいそうなんで説明
普通にプロファイラというと
実行時にある関数がどれだけ呼び出されて、CPUをどれくらい使っているかを調べるソフト。
これでネックになっている関数を調べ、その呼び出す回数を減らしたり、アルゴリズムを決めるのに使う。
実行はプロファイル用にコンパイルした実行ファイルを使う。
もちろん、計測する処理が入るので実行時間は長くなり、
これを実行したからといってプログラムが速くなるわけではない。
ちなみに、VC++6.0のプロファイラは実行時間は一瞬だが全く役に立たなかったと思う。
最適化コンパイラのPGOは
簡単に言うと、ある関数をインライン展開するかどうかを決めるため方法で、
たくさん呼ばれている関数はインライン展開し、
ほとんど呼ばれない関数はインライン展開しないというものだと思う。
ただ、実行時のパラメータによって呼び出し回数は変化すると思うので
すべての条件で高速化につながるとは限らない気がする。あと、最適化には速度とファイルサイズサイズの最適化があり、
両者はトレードオフの関係にあると言われている。
PGOは両者のバランスを考えて最適化を行っている。間違っていたら訂正よろしく。
169 名前:168:2005/06/02(木) 14:53:46
>>167説明を詳しく見てませんでしたが、.pgcファイルってのを作って
これを元にアプリを試験実行してから再リンクするようですね。
そして、実行にかかる時間が異なる 2 つのシナリオがある場合、
重み付けで調整まで出来るらしい。コンパイラもここまできたのかって感じがする。
170 名前:114:2005/06/02(木) 14:54:27
>>168
間違い指摘じゃないけど、使った感触からの想像では、PGOで速くなってる
要因はinlineよりも別の要素が大きいんだと思う。inlineがメインだったら、WPOの状態からとさほど変わらないんじゃないかと。
コンパイラの挙動を覗いたわけじゃないから正確かどうかはわかりませんが。171 名前:デフォルトの名無しさん:2005/06/02(木) 15:02:12
プロファイラはVisual Studio 2005 Team System Developer に付き
さらに追記すると
最適化コンパイラ(PGO)はVisual Studio 2005 の Professional 以上に付く
---
よーするに全然違うことをやっていた。てっきり.pgcファイルの中にプロファイリング情報が詰まっているのかと思っていたのだが、これは最適化コンパイラにとって必要な情報のようだ。
ちなみに学校のヤツはProfessional edition。この時点でMSのプロファイラが使用できないことが判明( つД`)
仮にTeam Developer Editionがあったとしたら、下記のリンク先にあるようなことができる。
システムの設計から展開までを支援する Visual Studio 2005(4)
MSのヘルプなら「チュートリアル : インストルメンテーションを使ったコマンド ライン プロファイリング」を参照。