プロファイルに基づく最適化の例

ここでは、PGO の 3 つの基本フェーズ (またはステップ) の例を説明します。

PGO を使用する際は、次のガイドラインに従ってください。

コンパイラーは、動的情報の生成後に関数が変更された場合、動的情報が関数に対応していないことを示す警告を発行します。

プロファイルに基づく最適化 (PGO) のフェーズ

インストルメンテーション・コンパイルとリンク

インストルメント済み情報を含む実行ファイルを生成するには、-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 オプション」を参照してください。