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

PGO の基本的なフェーズは次の 3 つです:

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

-prof_gen を使用して、インストルメント済み情報付きの実行ファイルを生成します。また、多くのプログラムに適した -prof_dir オプションを使用してください。特に、複数のディレクトリに渡るソース・ファイルを持つアプリケーションには使用してください。-prof_dir は、プロファイル情報が同じ場所で生成されることを保証します。
例:

prompt>icpc -prof_gen -prof_dir /profdata -c a1.cpp a2.cpp a3.cpp
prompt>icpc a1.o a2.o a3.o

2 番目のコマンドの代わりにリンカを直接使用して、インストルメント済みプログラムを生成できます。

インストルメント済み実行

代わりの何らかのデータセットを使用してインストルメント済みプログラムを実行して、動的情報ファイルを作成します。

prompt>./a.out

作成される動的情報ファイルは、a.out を実行するたびに毎回別の名前と .dyn というサフィックスが付きます。また、このインストルメント済みファイルは、特定のデータセットでこのプログラムを実行したときの振舞いを予測するのに役立ちます。このプログラムは、入力データを変えて何度でも実行できます。

フィードバック・コンパイル

-prof_use を指定してソースファイルのコンパイルとリンクを行い、動的情報を使用して、そのプロファイルに従ってプログラムを最適化します。

prompt>icpc -prof_use -ipo a1.cpp a2.cpp a3.cpp

最適化のほかに、コンパイラは pgopti.dpi ファイルを生成します。一般に、第 1 フェーズではデフォルトの最適化 (-O2) を行い、第 3 フェーズでは、さらに高度な最適化 (-ipo) を指定します。上の例では第 1 フェーズで -O2 を使用し、第 3 フェーズで -O2 -ipo を使用しました。

-prof_gen[x] オプションを使用すると、-ipo オプションは無視されます。x 修飾子を付けると、補足情報が収集されます。