インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

インストルメンテーションを利用するアプリケーションのプロファイル

アプリケーションのプロファイルは、次のフェーズで構成されます。

このトピックでは、この 3 つのフェーズ (ステップ) のそれぞれについてサンプルコマンドを使用してアプリケーションをプロファイルする方法を示します。

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

    インストルメント済み情報を含む実行ファイルを生成するには、[Q]prof-gen を使用します。コードカバレッジ・ツール用の最小限のインストルメンテーションみのを取得するには、/Qcov-gen (Windows*) を使用します。

    オペレーティング・システム

    コマンド

    Linux* および macOS*

    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

    Windows*

    icl /Qcov-gen /Qcov-dirc:/cov_data a1.cpp a2.cpp a3.cpp

    icl a1.obj a2.obj a3.obj

    複数のディレクトリーにソースファイルがあるアプリケーションの場合は、[Q]prof-dir オプションまたは /Qcov-dir オプション (Windows*) を使用します。このオプションを使用すると、プロファイル情報が一定の場所に作成されます。サンプルコマンドでは、複数のソースファイルでこれらのオプションを組み合わせる方法を説明します。

    -prof-gen=srcpos オプション (Linux* および macOS*) または /Qprof-gen:srcpos オプション (Windows*) を使用すると、コンパイラーは補足情報を収集します。収集した補足情報は、コードカバレッジ・ツールを含む特定のツールで使用できます。このようなツールを使用する予定がない場合は、-prof-gen=srcpos (Linux* および macOS*) または /Qprof-gen:srcpos (Windows*) を指定しないでください。拡張オプションを使用しても、最適化の向上は見込めず、また並列コンパイル時間が遅くなる可能性があります。コードカバレッジ・ツールにのみインストルメンテーションを使用する場合は、/Qprof-gen:srcpos オプション (Windows*) の代わりに、/Qcov-gen オプション (Windows*) を使用してインストルメンテーション・オーバーヘッドを最小限にしてください。

    PGO データ収集は、シリアル・アプリケーションのデータ収集向けに最適化されており、高度に並列化された領域では精度がわずかに低下します。ただし、OpenMP* の並列構造を含むファイルまたはアプリケーションでは、threadsafe キーワードを指定して -prof-gen (Linux* および macOS*) または /Qprof-gen (Windows*) オプションを使用できます。threadsafe キーワードを指定することで、高度な並列化を含むアプリケーションで PGO データ収集をサポートするインストルメント済みオブジェクト・ファイルが生成されます。ただし、データ収集のオーバーヘッドが増える可能性があります。インテル® MIC アーキテクチャーをターゲットとするインテル® 64 アーキテクチャーでは、有効な PGO モードとして -prof-gen (Linux* および macOS*) または /Qprof-gen (Windows*) オプションで threadsafe キーワードのみ指定できます。

    シリアルプログラムと異なり、OpenMP* を使用する並列プログラムでは、コードパスの動的スケジュールにより、同じデータセットであっても収集結果が常に同じになるとは限りません。

  2. インストルメント済みプログラムの実行

    対応するデータセットを使用してインストルメント済みプログラムを実行し、1 つ以上の動的情報ファイルを作成します。

    オペレーティング・システム

    コマンド

    Linux* および macOS*

    ./a1.out

    Windows*

    a1.exe

    インストルメント済みプログラムを実行すると、一意の名前で拡張子が .dyn の動的情報ファイルが生成されます。インストルメント済みプログラムを実行するたびに、新しい動的情報ファイルが作成されます。

    入力データを変更して、プログラムを複数回実行できます。

    デフォルトでは、.dyn ファイルの名前は、次の命名規則に従って付けられます: <timestamp>_<pid>.dyn.dyn ファイルは、環境変数で指定された場所、コンパイル時に指定された場所、または現在のディレクトリーに生成されます。

    別の実行によって生成されたファイルと区別できるように、INTEL_PROF_DYN_PREFIX 環境変数で .dyn ファイル名に追加するプリフィクスを指定できます。その場合、インストルメント済みアプリケーションを実行すると、次の名前の .dyn ファイルが生成されます: <prefix>_<timestamp>_<pid>.dyn<prefix> は指定した識別子です。INTEL_PROF_DYN_PREFIX 環境変数は、インストルメント済みアプリケーションを起動する前に設定しておく必要があります。

    INTEL_PROF_DYN_PREFIX 環境変数で指定する値では、次の文字を使用できません: < > : " / \ | ? *。無効なプリフィクスを指定すると、デフォルトの命名規則が使用されます。

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

    このステップに入る前に、すべての .dyn ファイルと .dpi ファイルを同じディレクトリーにコピーします。[Q]prof-use オプションを使用してソースファイルのコンパイルとリンクを行います。このオプションにより、コンパイラーは動的情報を使用して、そのプロファイルに従ってプログラムを最適化します。

    オペレーティング・システム

    Linux* および macOS*

    icpc -prof-use -ipo -prof-dir/usr/profiled a1.cpp a2.cpp a3.cpp

    Windows*

    icl /Qprof-use /Qipo /Qprof-dir:c:\profiled a1.cpp a2.cpp a3.cpp

    最後のフェーズでは、インストルメント済みプログラムの実行中 (フェーズ 2) に生成された動的情報を使用して、ソースファイルのコンパイルとリンクを行います。

    実行ファイルの最適化に加えて、コンパイラーは pgopti.dpi ファイルを生成します。

    通常、フェーズ 1 ではデフォルトの最適化オプション、O2 を指定し、フェーズ 3 (最終) コンパイルではさらに高度な最適化オプション [Q]ipo を指定します。上記の例では、ステップ 1 で O2、ステップ 3 で [Q]ipo を使用しています。

コンパイラーはフェーズ 1 で [Q]prof-gen が使用されている場合、[Q]ipo オプションや [Q]ip オプションを無視します。