2005年に発売が予定されているVisual C++ 2005には,プロファイルに基づく最適化(PGO)機能が実装される。PGOとは,そのプログラムが実際に動作したときの情報を利用して最適化する機能。リンク時にコードを生成する,モジュールをまたがった最適化(Whole Program Optimization)機能を利用する。通常の最適化以上に高速なコードを生成できる可能性がある。

 Visual C++ 2005は現在ベータ版で,Visual Studio 2005ベータ1として,MSDN(Microsoft Developer network)の会員など一部のユーザーに配布されている。ベータ1にもすでにPGOの機能は実装されており,その効果をすぐに試せる。

 PGOを利用したコードを生成するには,次の3つの段階を踏む。

 まず,「/GL」オプションを指定してコンパイルする。そして,「/LTCG:PGI」オプションと「/PGD:アプリケーション名.pgd」オプションを指定してリンクする。すると,インスツルメント・コードと呼ぶ,プロファイル情報を収集するためのコードを埋め込んだ実行ファイルが生成される。同時に,プロファイル情報を格納する.pgdファイルも作られる。

 次に,今生成された実行ファイルを実際に動かす。このときにプロファイル情報が収集される。

 最後に,「/LTCG:PGO」オプションを指定してリンクすると,収集したプロファイル情報に基づいて最適化された実行ファイルが生成される。

 Visual Studio 2005には,Visual C++ 2005のPGOを利用するための,上記3段階のそれぞれに相当するメニューが用意されている。例えば,インスツルメント・コードを生成するには[Build]-[Profile Guided Optimization]-[Instrumental Build]メニューを使う。いちいちコンパイル・オプションを,プロジェクトのプロパティ変更ダイアログを使って変更する必要はない。

 なお,PGOは,Win32またはWin64アプリケーションに対してのみ有効である。.NETアプリケーション開発時には利用できない。また,エディット・コンティニュー機能を利用するための「/ZI」オプションとは,同時に指定できない。

(山口 哲弘=日経Windowsプロ

【IT Pro-Windows Reviewメール】を好評配信中。申し込みはこちら