アプリケーションのプロファイルは、次のフェーズで構成されます。
このトピックでは、この 3 つのフェーズ (ステップ) のそれぞれについてサンプルコマンドを使用してアプリケーションをプロファイルする方法を示します。
インストルメント済み情報を含む実行ファイルを生成するには、-prof-gen (Linux* および Mac OS* X) または /Qprof-gen (Windows*) を使用します。
オペレーティング・システム |
コマンド |
---|---|
Linux および Mac OS X |
icpc -prof-gen -prof-dir/usr/profiled a1.cpp a2.cpp a3.cpp icpc a1.o a2.o a3.o |
Windows |
icl /Qprof-gen /Qprof-dirc:\profiled a1.cpp a2.cpp a3.cpp icl a1.obj a2.obj a3.obj |
複数のディレクトリーにソースファイルがあるアプリケーションの場合は、-prof-dir (Linux および Mac OS X)、/Qprof-dir (Windows) オプションを使用します。このオプションを使用すると、プロファイル情報が一定の場所に作成されます。サンプルコマンドでは、複数のソースファイルでこれらのオプションを組み合わせる方法を説明します。
-prof-gen=srcpos (Linux および Mac OS X) または /Qprof-gen:srcpos (Windows) オプションを使用すると、コンパイラーは補足情報を収集します。収集した補足情報は、コード・カバレッジ・ツールなど、特定のツールでのみ使用できます。このようなツールを使用する予定がない場合は、-prof-gen=srcpos (Linux および Mac OS X) または /Qprof-gen:srcpos (Windows) を指定しないでください。拡張オプションを使用しても、最適化の向上は見込めず、また並列コンパイル時間が遅くなる可能性があります。
対応するデータセットを使用してインストルメント済みプログラムを実行し、1 つ以上の動的情報ファイルを作成します。
オペレーティング・システム |
コマンド |
---|---|
Linux および Mac OS X |
./a1.out |
Windows |
a1.exe |
インストルメント済みプログラムを実行すると、一意の名前で拡張子が .dyn の動的情報ファイルが生成されます。インストルメント済みプログラムを実行するたびに、新しい動的情報ファイルが作成されます。
入力データを変更して、プログラムを複数回実行できます。
このステップに入る前に、すべての .dyn ファイルと .dpi ファイルを同じディレクトリーにコピーします。-prof-use (Linux および Mac OS X)、/Qprof-use (Windows) オプションを使用してソースファイルのコンパイルとリンクを行います。このオプションにより、コンパイラーは動的情報を使用して、そのプロファイルに従ってプログラムを最適化します。
オペレーティング・システム |
例 |
---|---|
Linux および Mac OS X |
icpc -prof-use -ipo -prof-dir/usr/profiled a1.cpp a2.cpp a3.cpp |
Windows |
icl /Qprof-use /Qipo /Qprof-dirc:\profiled a1.cpp a2.cpp a3.cpp |
最後のフェーズでは、インストルメント済みプログラムの実行中 (フェーズ 2) に生成された動的情報を使用して、ソースファイルのコンパイルとリンクを行います。
実行ファイルの最適化に加えて、コンパイラーは pgopti.dpi ファイルを生成します。
通常、フェーズ 1 ではデフォルトの最適化オプション、-O2 (Linux および Mac OS X) または /O2 (Windows) を指定し、最終 (フェーズ 3) コンパイルではさらに高度な最適化オプション -ipo (Linux)、/Qipo (Windows) を指定します。例えば、上記の例では、ステップ 1 で -O2 (Linux および Mac OS X) または /O2 (Windows)、ステップ 3 で -ipo (Linux または Mac OS X) または /Qipo (Windows) を使用しています。
コンパイラーはフェーズ 1 では、-prof-gen (Linux および Mac OS X) や /Qprof-gen (Windows) が使用されている場合は、-ipo や -ip (Linux および Mac OS X) または /Qipo や /Qip (Windows) を無視します。