オプション | 説明 |
---|---|
-prof_gen[x] |
インストルメント済み実行の準備として、インストルメント済みコードをオブジェクト・ファイル内に生成するようにコンパイラに命令するオプションです。 |
-prof_use |
プロファイルによって最適化された実行ファイルを生成し、利用可能な動的情報( .dyn )ファイルをいくつかマージして pgopti.dpi ファイルを1個作成するようにコンパイラに命令するオプションです。 |
コードの動作が実行ごとに大きく異なる場合は、プロファイル情報によって得られるメリットが、最新のプロファイルを維持する作業に見合うものであるかどうか検討する必要があります。基本となるプロファイルに基づく最適化には、次のオプションが PGO フェーズで使用されます。
-prof_gen[x] オプションは、各基本ブロックの実行カウントを取得するために、プロファイル用プログラムをインストルメントします。インストルメント済みのプログラムを実行する準備として、PGO の第1フェーズ で、インストルメント済みコードをオブジェクト・ファイルに生成するようにコンパイラに指示します。 -prof_genx コンパイルでは、並列化 make を自動的にサポートします。
-prof_use オプションは、PGO の第3フェーズ で使用され、プロファイルによって最適化された実行ファイルを生成し、利用可能な動的情報(.dyn) ファイルをいくつかマージして pgopti.dpi ファイルを1個作成するようにコンパイラに指示します。
注
動的情報ファイルは、インストルメント済み実行ファイルを実行する第2フェーズで生成されます。
インストルメント済みプログラムを何回か実行する場合は、-prof_use を指定すると、実行するたびに同じ動的情報ファイル同士がマージされ、その前の pgopti.dpi ファイルは上書きされます。
-fnsplit-は関数分割を無効にします。フェーズ3で-prof_useにより関数分割は有効になります。これは、ルーチンを異なるセクションに分割することによって、コードの局所性を向上させるためです。異なるセクションとは、コールドまたは、あまり実行されないコードを含むセクションと、残りのコード(ホットコード)を含むセクションです。
次のような理由により、-fnsplit-を使用して、関数分割を無効にできます。
最も重要なことは、デバッグの機能を向上させることです。デバッグのシンボルテーブルでは、分割ルーチン、すなわちホット・コード・セクションとコールド・コード・セクションを持つルーチンを表示するのは困難です。
-fnsplit-オプションは、ルーチン内の分割を無効にしますが、関数のグループ化を有効にします。これは、コールド・コード・セクションまたはホット・コード・セクションのいずれかにルーチン全体を配置する最適化機能です。関数のグループ化は、デバッグ機能を低下させません。
別の理由としては、プロファイル・データが実際のプログラム動作をしなかった場合、つまり、ルーチンが実際は稀ではなく頻繁に使用される場合です。
注
Itanium ベース・アプリケーションの場合、-O3 レベルの最適化で -prof_use オプションを使用する場合、 -O3 オプションが必要です。 -O2 またはより低いレベルの最適化で -prof_use オプションを使用する場合、デフォルトのオプションでプロファイル・データを生成できます。