インテル® C++ コンパイラー XE 13.1 ユーザー・リファレンス・ガイド
コンパイラー・オプションの -ipo (Linux*) または /Qipo (Windows*) を使用して、複数ファイルにわたるプロシージャー間の最適化によりアプリケーションをビルドする代わりに、コンパイラーとリンカーを利用して、関数とデータをアプリケーションに配置する場所についてグローバルな判断を行い、最適化の利点を得ることができます。 これらの最適化は、OS X* システムでは利用できません。
次の表では、それぞれの最適化について、関数の型または適用するグローバルデータ、およびサポートされているオペレーティング・システムとアーキテクチャーをリストしています。
最適化 |
関数の型またはデータ |
サポートされている OS とアーキテクチャー |
---|---|---|
関数順序リスト: リンカーがプログラムの非スタティック・ルーチン (関数) をリンクする際の順序を指定します。この最適化では、コードの局所性とページングの減少を向上させることによってアプリケーション・パフォーマンスを向上できます。「関数順序リストと IPO コードレイアウトの比較」も参照してください。 |
extern 関数とライブラリー関数のみ (スタティック関数ではありません)。 |
Windows*: すべてのインテル® アーキテクチャー Linux*: サポートされていません |
関数のグループ化: リンカーがプログラムの extern とスタティック・ルーチン (関数) をプログラムのホット・セクションまたはコールド・セクションのいずれに配置するかを指定します。この最適化では、コードの局所性とページングの減少を向上させることによってアプリケーション・パフォーマンスを向上できます。 |
extern 関数とスタティック関数のみ (ライブラリー関数ではありません)。 |
Linux*: IA-32 アーキテクチャーおよびインテル® 64 アーキテクチャー Windows*: サポートされていません |
関数の順序設定: プロファイル情報を使用して、スタティックおよび extern ルーチンの順序設定を有効にします。リンカーがプログラムのルーチン (関数) をリンクする際の順序を指定します。この最適化では、コードの局所性とページングの減少を向上させることによってアプリケーション・パフォーマンスを向上できます。 |
extern 関数とスタティック関数のみ (ライブラリー関数ではありません)。 |
Linux* および Windows*: すべてのインテル® アーキテクチャー |
データの順序設定: プロファイル情報に基づいてスタティック・グローバル・データ項目 の順序設定を有効にします。 リンカーがプログラムのグローバルデータをリンクする際の順序を指定します。この最適化では、スタティック・グローバル・データの局所性の向上、大規模データセットのページングの減少、データキャッシュの使用の向上により、アプリケーション・パフォーマンスを向上できます。 |
スタティック・グローバル・データ のみ |
Linux* および Windows*: すべてのインテル® アーキテクチャー |
上記にリストされた、関数関連の順序設定の最適化は、1 つのみ使用できます。ただし、データの順序設定については、いずれかの関数関連の順序設定とともに使用できます (関数の順序設定によるデータの順序設定、または関数のグループ化によるデータの順序設定など)。この場合、prof-gen オプションのキーワード globdata (データの順序設定で必要) を srcpos (関数関連の順序設定で必要) の代わりに指定します。
次のセクションでは、関数順序リスト、関数のグループ化、関数の順序設定、データの順序設定の最適化のいずれかを実装するのに必要なコマンドを説明します。 これらすべての最適化で -ipo (Linux*) または /Qipo (Windows*) や相当するコンパイラー・オプションは指定しないでください。
このセクションでは、関数順序リストの生成の例を紹介します。file1.cpp と file2.cpp からなる C++ プログラムがあると仮定します。 また、c:\profdata という名前でプロファイル・データ・ファイル用のディレクトリーを作成したと仮定します。 Windows* アプリケーションの関数順序リストを生成して使用するには、次のようなコマンドを入力します。
プログラムを /Qprof-gen:srcpos オプションでコンパイルします。 /Qprof-dir オプションでプロファイル・ファイルのディレクトリーを指定します。 このステップでは、インストルメント済み実行ファイルを作成します。
1 つ以上の入力データセットを使用してインストルメント済みプログラムを実行します。ディレクトリーを実行ファイルが保存されているディレクトリーに変更します。プログラムが実行されるたびに、.dyn ファイルが作成されます。
このステップに入る前に、すべての .dyn ファイルと .dpi ファイルを同じディレクトリーにコピーします。インストルメント済みプログラムの実行で得られたデータを profmerge ツールでマージして、pgopti.dpi ファイルを作成します。 /prof_dir オプションで、.dyn ファイルのディレクトリーを指定します。
proforder ツールを使用して、関数順序リストを生成します。(デフォルトでは、関数順序リストは proford.txt ファイルに生成されます。)
リンカーに ORDER オプションを指定し、生成されたプロファイル・フィードバックを使用してアプリケーションをコンパイルします。 /Qprof-dir オプションでプロファイル・ファイルのディレクトリーを指定します。
このセクションでは、関数のグループ化の最適化を使用する一般的な例を紹介します。file1.cpp と file2.cpp からなる C++ プログラムがあると仮定します。 また、profdata という名前でプロファイル・データ・ファイル用のディレクトリーを作成したと仮定します。 Linux* アプリケーションで関数のグループ化を使用するには、次のようなコマンドを入力します。
-prof-gen オプションでプログラムをコンパイルします。 -prof-dir オプションでプロファイル・ファイルのディレクトリーを指定します。 このステップでは、インストルメント済み実行ファイルを作成します。
1 つ以上の入力データセットを使用してインストルメント済みプログラムを実行します。ディレクトリーを実行ファイルが保存されているディレクトリーに変更します。プログラムが実行されるたびに、.dyn ファイルが作成されます。
すべての .dyn ファイルと .dpi ファイルを同じディレクトリーにコピーします。必要に応じて、インストルメント済みプログラムの実行で得られたデータを profmerge ツールでマージして、pgopti.dpi ファイルを作成します。
-prof-func-group オプションで関数のグループ化を指定し、-prof-use オプションでコンパイルのフィードバックを指定します。生成されたプロファイル・フィードバックに基づいてアプリケーションをコンパイルします。 再度、-prof-dir オプションを使用して、プロファイル・ファイルの場所を指定します。
このセクションでは、関数の順序設定の最適化の例を紹介します。file1.cpp と file2.cpp からなる C++ プログラムがあると仮定します。 また、c:\profdata (Windows*) または ./profdata (Linux*) という名前のプロファイル・データ・ファイルのディレクトリーが作成されていると仮定します。 アプリケーションで関数の順序設定を生成して使用するには、次のようなコマンドを入力します。
-prof-gen=srcpos (Linux*) または /Qprof-gen:srcpos (Windows*) オプションでプログラムをコンパイルします。 そして、-prof-dir (Linux*) または /Qprof-dir (Windows*) オプションでプロファイル・ファイルのディレクトリーを指定します。 このステップでは、インストルメント済み実行ファイルを作成します。
1 つ以上の入力データセットを使用してインストルメント済みプログラムを実行します。ディレクトリーを実行ファイルが保存されているディレクトリーに変更します。プログラムが実行されるたびに、.dyn ファイルが作成されます。
すべての .dyn ファイルと .dpi ファイルを同じディレクトリーにコピーします。必要に応じて、インストルメント済みプログラムの実行で得られたデータを profmerge ツールでマージして、pgopti.dpi ファイルを作成します。
-prof-func-order (Linux*) または /Qprof-func-order (Windows*) オプションで関数の順序設定を指定し、-prof-use (Linux*) または /Qprof-use (Windows*) オプションでフィードバック・コンパイルを指定します。生成されたプロファイル・フィードバックに基づいてアプリケーションをコンパイルします。 -prof-dir (Linux*) または /Qprof-dir (Windows*) オプションを使用して、プロファイル・ファイルの場所を指定します。
このセクションでは、データの順序設定の最適化の例を紹介します。file1.cpp と file2.cpp からなる C++ プログラムがあると仮定します。 また、c:\profdata (Windows*) または ./profdata (Linux*) という名前のプロファイル・データ・ファイルのディレクトリーが作成されていると仮定します。 アプリケーションでデータの順序設定を使用するには、次のようなコマンドを入力します。
-prof-gen=globdata (Linux*) または /Qprof-gen:globdata (Windows*) オプションでプログラムをコンパイルします。 そして、-prof-dir (Linux*) または /Qprof-dir (Windows*) オプションでプロファイル・ファイルのディレクトリーを指定します。 このステップでは、インストルメント済み実行ファイルを作成します。
1 つ以上の入力データセットを使用してインストルメント済みプログラムを実行します。現在のディレクトリー以外の場所を指定した場合、実行ファイルが含まれているディレクトリーに変更してください。プログラムが実行されるたびに、.dyn ファイルが作成されます。
すべての .dyn ファイルと .dpi ファイルを同じディレクトリーにコピーします。必要に応じて、インストルメント済みプログラムの実行で得られたデータを profmerge ツールでマージして、pgopti.dpi ファイルを作成します。
-prof-data-order (Linux*) または /Qprof-data-order (Windows*) オプションでデータの順序設定を指定し、-prof-use (Linux*) または /Qprof-use (Windows*) オプションでフィードバック・コンパイルを指定します。生成されたプロファイル・フィードバックに基づいてアプリケーションをコンパイルします。 -prof-dir (Linux*) または /Qprof-dir (Windows*) オプションを使用して、プロファイル・ファイルの場所を指定します。