ここでは、PGO の 3 つの基本フェーズ (またはステップ) の例を説明します。
PGO を使用する際は、次のガイドラインに従ってください。
インストルメント済みコードを実行してからフィードバック・コンパイルを行うまでの間は、プログラムに加える変更を最小限に抑えます。フィードバック・コンパイルでは、情報が生成した後に変更された関数の動的情報は無視します。
コンパイラーは、動的情報の生成後に関数が変更された場合、動的情報が関数に対応していないことを示す警告を発行します。
インストルメント済みコードを実行してからフィードバック・コンパイルを行うまでの間にソースファイルに多数の変更を加える場合は、インストルメンテーション・コンパイルを繰返します。
プロファイル・サマリー・ファイルの名前は、-prof-file (Linux*) または /Qprof-file (Windows*) オプションを使用して指定します。
インストルメント済み情報を含む実行ファイルを生成するには、-prof-gen (Linux) または /Qprof-gen (Windows) を使用します。
複数のディレクトリーにソースファイルがあるアプリケーションの場合は、-prof-dir (Linux)、/Qprof-dir (Windows) オプションを使用します。-prof-dir (Linux)、/Qprof-dir (Windows) オプションは、プロファイル情報が一定の場所に作成されるようにします。次に、これらのオプションを組み合わせた例を示します。
プラットフォーム |
コマンド |
---|---|
Linux |
icpc -prof-gen -prof-dir /profdata -c a1.cpp a2.cpp a3.cpp icpc a1.o a2.o a3.o |
Windows |
icl /Qprof-gen /Qprof-dirc:\profdata /c a1.cpp a2.cpp a3.cpp icl a1.obj a2.obj a3.obj |
2 番目のコマンドの代わりに、リンカーを直接使用して、インストルメント済みプログラムを生成できます。
-prof-genX (Linux) または /Qprof-genX (Windows) オプションを使用すると、コンパイラーは補足情報を収集します。このオプションを使用して収集した補足情報は、特定のツールでのみ使用できます。詳細は、「基本的な PGO オプション」を参照してください。
対応するデータセットを使用してインストルメント済みプログラムを実行し、1 つ以上の動的情報ファイルを作成します。次に、上記のコマンド例で生成された実行ファイルを実行するコマンドラインの例を示します。
プラットフォーム |
コマンド |
---|---|
Linux |
./a.out |
Windows |
a1.exe |
インストルメント済みプログラムを実行すると、一意の名前で拡張子が .dyn の動的情報ファイルが生成されます。インストルメント済みプログラムを実行するたびに、新しい .dyn ファイルが作成されます。
インストルメント済みのファイルは、プログラムが特定のデータセットを使ってどのように動作するのかを予測するのに役立ちます。入力データを変更して、プログラムを複数回実行できます。
最後のフェーズでは、インストルメント済みプログラムの実行フェーズで生成された動的情報を使用して、ソースファイルをコンパイルおよびリンクします。-prof-use (Linux)、/Qprof-use (Windows) オプションを使用してソースファイルのコンパイルとリンクを行い、動的情報を使用して、そのプロファイルに従ってプログラムを最適化します。
プラットフォーム |
例 |
---|---|
Linux |
icpc -prof-use -ipo a1.cpp a2.cpp a3.cpp |
Windows |
icl /Qprof-use /Qipo a1.cpp a2.cpp a3.cpp |
実行ファイルの最適化に加えて、コンパイラーは pgopti.dpi ファイルを生成します。
一般に、フェーズ 1 ではデフォルトの最適化オプション、-O2 (Linux)、/O2 (Windows) を指定し、フェーズ 3 ではさらに高度な最適化オプション、-ipo (Linux)、/Qipo (Windows) を指定します。例えば、上記の例では、フェーズ 1 で -O2 (Linux)、/O2 (Windows)、フェーズ 3 で -ipo (Linux)、/Qipo (Windows) を使用しています。
コンパイラーは、-prof-gen (Linux)、/Qprof-gen (Windows) オプションが使用されている場合、-ipo (Linux)、/Qipo (Windows) オプションを無視します。
詳細は、「基本的な PGO オプション」を参照してください。