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

PGO には 3 つの基本フェーズがあります。

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

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

IA-32 システム

prompt>icc -prof_gen -prof_dirc:\profdata -c a1.c a2.c a3.c
prompt>
icc a1.o a2.o a3.o

Itanium® ベース・システム

prompt>ecc -prof_gen -prof_dirc:\profdata -c a1.c a2.c a3.c
prompt>
ecc a1.o a2.o a3.o

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

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

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

prompt>./a.o

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

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

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

 IA-32のシステム:

prompt>icc -prof_use -ipo a1.c a2.c a3.c

Itanium ベース・システム:

prompt>ecc -prof_use -ipo a1.c a2.c a3.c

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

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