プロファイルに基づく最適化の方法とその使用モデル

PGO は、コンパイルの時点での予測が困難な、繰返し実行される分岐を含むコードの最適化として最も有効に働きます。この例として、ほとんどの場合にエラー条件が偽になるようなエラーチェック処理を多数含むコードが挙げられます。このような、いわゆる「コールド」(cold) なエラー処理コードを、分岐予測をほとんど誤ることのないように、配置できます。"ホット"コードに対する"コールド"コードの挿入を最小限に抑えると、命令キャッシュの動作が改善されます。

PGO フェーズ

PGO 手法には、次の 3 つのフェーズおよびオプションが必要です。

  1. -prof_gen によるインストルメンテーション・コンパイルとインストルメンテーション・リンク

  2. 実行ファイルの実行によるインストルメント済みのプログラムの実行。 結果として、動的情報ファイル (.dyn) が作成されます。

  3. -prof_use オプションによるフィードバック・コンパイル

下記のフローチャートは、IA-32 アーキテクチャのコンパイルと Itanium® アーキテクチャのコンパイルの場合のこのプロセスを示したものです。PGO の適否を決める手掛かりの 1 つは、コードのどの部分に処理が集中しているかを知ることです。例えば、プログラムに提供するデータセットが大変類似していて、実行のたびに同じような処理が繰り返されるような場合には、PGO によってプログラムの実行を最適化できます。しかし、さまざまなデータセットを使用している場合は、呼び出されるアルゴリズムも多様化する可能性があります。このような場合、プログラムは実行のたびに違った動作になるときがあります。

基本的なプロファイルに基づく最適化のフェーズ

PGO の使用モデル

下記の図は PGO の使用モデルを示しています。 

IA-32 システム用の簡単な例 (myApp.f90) について順に説明します。

  1. 設定

    PROF_DIR=c:/myApp/prof_dir

  2. コマンドの発行

    ifort -prof_genx myApp.f90

    このコマンドは、プログラムをコンパイルして、インストルメント済みバイナリ myApp.exe と静的プロファイル情報ファイル pgopti.spi を生成します。

  3. myApp の実行

    myApp が呼び出される度に、インストルメント済みアプリケーションが実行され、PROF_DIR で指定されたディレクトリ内に拡張子 .dyn の動的プロファイル情報ファイルが新規に生成されます。

  4. コマンドの発行

    ifort -prof_use myApp.f90

    このステップでは、コンパイラがすべての .dyn ファイルを、アプリケーションの全プロファイル情報を含む 1 つの .dpi ファイルにマージし、最適化されたバイナリを生成します。.dpi ファイルのデフォルト名は、pgopti.dpi です。