プロファイルに基づく最適化 (PGO) のクイック・リファレンス

プロファイルに基づく最適化には 3 つのフェーズ (ステップ) があります。


  1. インストルメント済み実行ファイルの作成時に、-prof-gen (Linux* OS および Mac OS* X) または /Qprof-gen (Windows* OS) オプションでコンパイルしてインストルメント済みコードを生成します。

  2. インストルメント済み実行ファイルを実行し、動的情報 (.dyn) ファイルを生成します。

  3. -prof-use (Linux および Mac OS X) オプションまたは /Qprof-use (Windows) オプションでプロファイル情報を使用してアプリケーションをコンパイルします。

次の図は、それぞのれフェーズとその結果を示しています。

 


 

各フェーズについての詳細は、「アプリケーションのプロファイル」を参照してください。

次の表は、PGO で使用されるコンパイラー・オプションのリストです。

Linux および Mac OS X

Windows

効果

-prof-gen

/Qprof-gen

各基本ブロックの実行カウントを取得するために、プロファイリング用にプログラムをインストルメントします。これは、フェーズ 1 (コードのインストルメント) で使用され、インストルメント済み実行の準備として、オブジェクト・ファイルのインストルメント済みコードを生成するようにコンパイラーに指示します。デフォルトでは、それぞれのインストルメント済み実行ファイルの実行で、各実行ファイルに対して 1 つと (Windows で) アプリケーションにより起動される各 DLL に 1 つ、動的情報 (dyn) ファイルを作成します。-prof-gen=default (Linux および Mac OS X) または /Qprof-gen:default (Windows) などのキーワードを指定できます。

キーワードは、フェーズ 2 (インストルメント済み実行ファイルの実行) で収集されるソース情報量を制御します。prof-gen キーワード:

  • インストルメント済みアプリケーション実行時 (フェーズ 2) に、default を指定 (またはキーワードを省略) して、prof-use オプションで使用するためのプロファイル情報と最適化を指示します。

  • インストルメント済みアプリケーション実行時 (フェーズ 2) に、srcpos または globdata を指定して、コード・カバレッジ・ツールテスト・プライオリタイゼーション・ツール用の追加のプロファイル情報を指示します。テスト・プライオリタイゼーション・ツールでは、.spi ファイルが使用されます。

  • インストルメント済みアプリケーション実行時 (フェーズ 2) に、globdata を指定して、データの順序設定の最適化用に追加のプロファイル情報を指示します。テスト・プライオリタイゼーション・ツールでは、.spi ファイルが使用されます。

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

-prof-use

/Qprof-use

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

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

インストルメント済みプログラムを複数回実行して、現在の pgopti.dpi サマリーファイルよりも新しい動的情報ファイルを作成する場合、このオプションでは動的情報ファイルは再度マージされ、既存の pgopti.dpi ファイルは上書きされます (PROF_NO_CLOBBER 環境変数を設定して、既存の dpi ファイルが上書きされないようにできます)。

prof-use でコンパイルする際は、すべての動的情報ファイルとサマリー情報ファイルは同じディレクトリー (現在のディレクトリーまたは prof-dir オプションで指定したディレクトリー) になければなりません。コンパイラー・オプションにはない特定の profmerge オプションを使用する必要がある場合 (複数のディレクトリーを指定する場合など)、profmerge ツールを使用してください。例えば、prof-use オプションで最適化されたアプリケーションを作成する前に、profmerge を使用して、新しい dpi サマリーファイルを作成することができます。

-prof-gen=weighted (Linux および Mac OS X) または /Qprof-gen:weighted (Windows) などのキーワードを指定できます。weighted キーワードを省略すると、マージされた動的情報 (dyn) ファイルは、各アプリケーション実行の時間の長さに比例してウェイトされます。weighted キーワードを指定すると、プロファイラーはデータカウントを正規化するために dyn ファイルの値と (実行時間にかかわらず) 等しいウェイトを適用します。このキーワードは、実行時間の長さが異なってもそれらを等しく扱う場合に役立ちます。

prof-use を使用する場合、prof-file オプションを指定して dpi サマリーファイルの名前を変更し、prof-dir オプションで動的情報 (dyn) ファイルとサマリー (dpi) ファイルのディレクトリーを指定することもできます。

Linux*:

  • このオプションを -prof-func-groups とともに使用すると、関数グループの動作を制御することができます。

-no-fnsplit

/Qfnsplit-

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

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

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

このオプションは、IA-32 アーキテクチャー (Windows) と IA-64 アーキテクチャー (Windows および Linux OS) でサポートされています。その他のプラットフォーム (インテル® 64 アーキテクチャー、Mac OS X、IA-32 アーキテクチャー (Linux)) ではサポートされていません。

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

IA-32 アーキテクチャー、Windows OS:

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

IA-64 アーキテクチャー、Linux および Windows:

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

-prof-func-groups

/Qprof-func-order

prof-use (フェーズ 3) とともに指定すると、プロファイル情報を使用したプログラムルーチンの順序付けを有効にできます。インストルメント済みプログラム (フェーズ 1) は、prof-gen オプションの srcpos キーワードによりコンパイルされている必要があります。ipo オプションによる複数ファイルのコンパイルでは使用できません。

Mac OS X: サポートされていません。

IA-64 アーキテクチャー: サポートされていません。

詳細は、「関数順序リストの使用、関数のグループ化、関数の順序設定、データの順序設定の最適化」を参照してください。

-prof-data-order

/Qprof-data-order

prof-use (フェーズ 3) とともに指定すると、プロファイル情報に基づいたスタティック・プログラムのデータ項目の順序付けを有効にできます。インストルメント済みプログラム (フェーズ 1) は、prof-gen オプションの srcpos キーワードによりコンパイルされている必要があります。ipo オプションによる複数ファイルのコンパイルでは使用できません。

Mac OS X: サポートされていません。

詳細は、「関数順序リストの使用、関数のグループ化、関数の順序設定、データの順序設定の最適化」を参照してください。

-prof-src-dir

/Qprof-src-dir

 

ソース・ディレクトリー・パスの完全なディレクリー情報を動的情報 (dyn) ファイルに格納するか、または動的情報ファイルから読み取るかを制御します。フェーズ 1 のコンパイル (prof-gen) で使用された場合は、フルパスをインストルメント済みアプリケーションの実行で作成された dyn ファイルに追加するかどうかを決定します。profmerge またはフェーズ 3 のコンパイル (prof-use) 中に使用された場合は、dyn ファイルや dpi ファイルの読み取り時にソースファイル名にフルパスが使用されているか、または無視されているかを判断します。

デフォルトの -prof-src-dir (Linux および Mac OS X) または /Qprof-src-dir (Windows) を使用すると、フル・ディレクトリー情報が使用され、また prof-src-root および prof-src-cwd オプションを使用できるようになります。

-no-prof-src-dir (Linux および Mac OS X) または /Qprof-src-dir- (Windows) を指定した場合は、ファイル名 (フルパスではなく) が格納され、使用されます。これを行うには、すべての dyn ファイルまたは dpi ファイルが現在のディレクトリーになければなりません。また prof-src-root および prof-src-cwd オプションは無視されます。

-prof-dir

/Qprof-dir

動的情報 (dyn) ファイルが作成、読み取り、格納されるディレクトリーを指定します。指定しない場合は、dyn ファイルはコンパイル中に使用された現在のディレクトリーに作成されるか、または現在のディレクトリーから読み取られます。例えば、このオプションをフェーズ 1 (prof-gen オプション) でのコンパイル時に使用して、フェーズ 2 でインストルメント済み実行ファイルの実行時に動的情報ファイルが作成される場所を定義します。また、このオプションをフェーズ 3 (prof-use オプション) のコンパイル時に使用して、動的情報ファイルを読み取る場所とサマリー (dpi) ファイルが作成される場所を定義します。

-prof-src-root または

-prof-src-cwd

/Qprof-src-root

または

/Qprof-src-cwd

ユーザー・アプリケーション・ファイルが格納されるルート・ディレクトリーのディレクトリー・パス・プリフィックスを指定します。

  • ソースファイルが格納されるルート・ディレクトリー・プリフィックスを指定するには、-prof-src-root (Linux および Mac OS X) または /Qprof-src-root (Windows) オプションを指定します。

  • 現在の作業ディレクトリーを使用するには、-prof-src-cwd (Linux および Mac OS X) または /Qprof-src-cwd (Windows) オプションを指定します。

このオプションは、-no-prof-src-dir (Linux および Mac OS X) または /Qprof-src-dir (Windows) を指定した場合は無視されます。

-prof-file

/Qprof-file

プロファイルのサマリーファイルにファイル名を指定します。このオプションが指定されていない場合、サマリー情報を含むファイル名は pgopti.dpi になります。

-prof-gen-sampling

/Qprof-gen-sampling

IA-32 アーキテクチャー: アプリケーションの実行ファイルをハードウェア・プロファイリング (サンプリング) 用に準備して、コンパイラーがソース・コード・マッピング情報を生成するようにします。

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

-ssp

/Qssp

 

IA-32 アーキテクチャー: ソフトウェア・ベースのスペキュレーティブ・プリコンピュテーション (SSP) 最適化を有効にします。

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

クイック・リファレンス・トピックの一覧は、「クイック・リファレンス・リスト」を参照してください。