基本的な PGO オプション

ここでは、プロファイルに基づく最適化で最もよく使用されるオプションについて説明します。

次のオプションが PGO のフェーズで使用されます。PGO を拡張するオプションについては、「高度な PGO オプション」を参照してください。

Windows*

Linux*

効果

/Qprof-gen

/Qprof-genx

-prof-gen

-prof-genx

各基本ブロックの実行カウントを取得するために、プロファイリング用にプログラムをインストルメントします。これは、PGO のフェーズ 1 (インストルメント済みコードの生成) で使用され、インストルメント済み実行の準備として、インストルメント済みコードをオブジェクト・ファイル内に生成するようにコンパイラーに指示します。動的情報 (.dyn) ファイルが生成されます。

x 修飾子を付けると、オプションは proforder ユーティリティーコード・カバレッジ・ツールのような特定のツールで使用できる補足ソース情報を収集します。

並列 make を行っている場合、このオプションは並列 make に影響を与えません。

詳細は、次のトピックを参照してください。

/Qprof-use

-prof-use

プロファイルによって最適化された実行ファイルを生成し、使用できる動的情報 (.dyn) ファイルを pgopti.dpi ファイルにマージするようにコンパイラーに指示します。このオプションは、PGO のフェーズ 3 (プロファイルによって最適化された実行ファイルの生成) で使用されます。

動的情報ファイルは、フェーズ 2 でインストルメント済みの実行ファイルを実行した時点で生成されます。

インストルメント済みのプログラムを複数回実行すると、実行するたびに動的情報ファイルがマージされ、元の pgopti.dpi ファイルは上書きされます。

詳細は、次のトピックを参照してください。

  • -prof-use コンパイラー・オプション

/Qprof-format-32

-prof-format-32

32 ビット・カウンターの使用: 本リリースからこのオプションの使用は推奨しません。デフォルトでは、インテル(R) コンパイラーは、.dyn および .dpi ファイルにおける多数のイベントを処理するために 64 ビット・カウンターを作成します。

Mac OS*: このオプションはサポートされていません。

このオプションは、旧バージョンのコンパイラーとの互換性を維持するために 32 ビット・カウンターを生成します。.dyn および .dpi ファイルの形式が現在のコンパイルで使用されている形式と互換性がない場合、次のメッセージが発行されます。

Error: xxx.dyn has old or incompatible file format - delete file and redo instrumentation compilation/execution.

.dyn および .dpi ファイルで 64 ビット形式のカウンターおよびポインターを使用することで、ポインターのサイズが異なるために発生するさまざまなプラットフォームの互換性の問題が排除されます。

詳細は、次のトピックを参照してください。

/Qfnsplit-

-fnsplit-

関数分割を無効にします。関数分割はフェーズ 3-prof-use (Linux) または /Qprof-use (Windows) オプションにより有効になります。これは、ルーチンを異なるセクションに分割することによって、コードの局所性を向上させるためです。異なるセクションとは、コールドまたは、あまり実行されないコードを含むセクションと、残りのコード (ホットコード) を含むセクションです。

次のような場合、関数分割を無効にします。

  • デバッグの機能を向上させるため。デバッグのシンボルテーブルでは、分割ルーチン、すなわちホット・コード・セクションとコールド・コード・セクションを持つルーチンを表示するのは困難です。

  • プロファイル・データが実際のプログラム動作をしなかった場合。つまり、ルーチンが実際は稀ではなく頻繁に使用される場合。

Windows のみ: このオプションは、IA-32 システムと Itanium(R) ベース・システムでは動作が異なります。

Mac OS: このオプションはサポートされていません。

IA-32 システム

  • オプションは、コードすべてを 1 つのセクションに配置し、関数分割を完全に無効にします。

Itanium ベース・システム

  • オプションは、ルーチン内の分割を無効にしますが、関数のグループ化を有効にします。これは、コールド・コード・セクションまたはホット・コード・セクションのいずれかにルーチン全体を配置する最適化です。関数のグループ化は、デバッグ機能を低下させません。  

「プロファイルに基づく最適化の例」を参照してください。

詳細は、次のトピックを参照してください。

  • -fnsplit コンパイラー・オプション