プロファイル指示フィードバック

プロファイル指示フィードバック (PDF) を使用すると、 アプリケーションのパフォーマンスを通常の使用例に合うように調整することができます。コンパイラーは、 分岐の頻度やコード・ブロックの実行の頻度の分析に基づいて、アプリケーシ ョンを最適化します。

PDF プロセスは、アプリケーションを実稼働環境に投入する前に、最適化の最後のステップの 1 つとして使用します。-O2 レベル以上の最適化では、PDF による恩恵を得られます-qipa オプションや最適化レベル -O4 および -O5 などの他の最適化も、PDF プロセスによる恩恵が得られます。

次の図は、PDF プロセスを表しています。

図 1. プロファイル指示フィードバック

プロファイル指示フィードバック

PDF プロセスを使用してアプリケーションを最適化するには、以下の手順に従います。

  1. -qpdf1 オプションを使用して、プログラム内の一部またはすべてのソース・ファイルをコンパイルします。 最適化レベル -O2 以上を指定する必要があります。

    注:
    • このステップでは、PDF マップ・ファイルが生成されます。これは、showpdf ユーティリティーで プロファイル情報の一部分をテキストまたは XML フォーマットで表示するために 使用されます。詳しくは、showpdf によるプロファイル情報の表示を参照してください。 プロファイル情報を表示する必要がない場合は、このステップで -qnoshowpdf オプションを指定して、 PDF マップ・ファイルが生成されないようにしてください。 -qnoshowpdf について詳しくは、-qshowpdf を参照してください。
    • PDF 最適化 (-qpdf) は、 -O2 といった初期レベルで指定することもできますが、 PDF 最適化は -O4 以上で行うことをお勧めします。
    • 必ずしもプログラムのすべてのファイルを、-qpdf1 オプションを指定してコンパイルする必要はありません。大規模なアプリケーションでは、 最適化の効果が最もよく現れるコード領域に的を絞って最適化を行うこともできます。
    • -O4 オプション、-O5 オプション、またはいずれかのレベルの -qipa オプションが有効になっている場合に、-qpdf1 オプションをリンク・ステップで指定し、コンパイル・ステップでは指定しない場合、コンパイラーは警告メッセージを発行します。 このメッセージでは、すべてのプロファイル情報を取得するためプログラムを再コンパイルする必要があることが示されます。
    制約事項: -qpdf1 を指定してコンパイルしたアプリケーションを実行するときは、通常の方法 (main 関数の実行の末尾に到達することを含む) でアプリケーションを終了させる必要があります。 システム・コール exit()_Exit()および abort() は、異常な終了方法とみなされ、サポートされていません。異常なプログラムの終了処理を使用すると、まったく生成されていない PDF ファイルまたは PDF データが使用されて、不完全な計測データが生成される場合があります。
  2. 生成されるアプリケーションを標準的なデータ・セットを使用して実行します。アプリケーションが終了すると、プロファイル情報は 1 つ以上の PDF ファイルに書き込まれます。さまざまなデータ・セットを使用して、生成されるアプリケーションを何度でもテスト実行することができます。使用された入力データに基づいた、 分岐の頻度やコード・ブロックの実行頻度のカウントを示すプロファイル情報が累積されます。 このステップは、PDF トレーニング・ステップと呼ばれています。デフォルトでは、PDF ファイルは ._pdf という名前になり、現行作業ディレクトリーまたは PDFDIR 環境変数で指定されたディレクトリーに入れられます。 PDFDIR 環境変数を設定した場合に、指定したディレクトリーが存在しないと、コンパイラーから警告メッセージが出されます。デフォルト値をオーバーライドするには、-qpdf1=pdfname または -qpdf1=exename オプションを使用します。

    -qpdf1 オプションを使用してプログラムを再コンパイルすると、コンパイラーは、新規アプリケーションを生成する前に、トレーニング・ステップで作成するファイルと同じ名前およびロケーションを持つ既存の PDF ファイルを削除します。

    注:
    • -qpdf1 または -qpdf2 オプションを使用してプログラムをコンパイルする場合、デフォルトで、一緒に -qipa オプションが level=0 で呼び出されます。
    • コンパイルおよび実行時間の浪費を避けるため、PDFDIR 環境変数が絶対パスに設定されていることを確認してください。そうでないと、誤ったディレクトリーからアプリケーションを実行するおそれがあり、コンパイラーがプロファイル情報ファイルを見つけることができません。この場合、プログラムを正しく最適化できなかったり、セグメンテーション障害によってプログラムが停止される可能性があります。セグメンテーション障害は PDF プロセスの完了前に PDFDIR 環境変数の値を変更して、アプリケーションを実行した場合にも起こることがあります。
    • 特殊なデータの使用は避けてください。 そうでないと、実行頻度の低いコード・パスの分析がゆがめられるおそれがあります。
  3. 複数の PDF ファイルが存在する場合は、 mergepdf ユーティリティーを使用して、それらのファイルを 1 つの PDF ファイルに結合します。例えば、時間の 53%、32%、15% にそれぞれ発生する使用パターンを表す 3 つの PDF ファイルを作成する場合は、次のコマンドが使用してください。
      mergepdf -r 53 file_path1  -r 32 file_path2  -r 15 file_path3 -o file_path4
    file_path1file_path2、および file_path3 はマージする PDF ファイルのディレクトリーおよび名前を指定し、file_path4 は出力 PDF ファイルのディレクトリーおよび名前を指定します。
    注:
    • バージョンまたは PTF レベルが異なる XL Fortran コンパイラーによって作成された PDF ファイルを混用しないようにしてください。
    • 結果のアプリケーションによって生成された PDF ファイルは編集できません。PDF ファイルを編集すると、生成される実行可能アプリケーションのパフォーマンスや機能に影響を与える可能性があります。
  4. 前と同じコンパイラー・オプションを使用してプログラムを再コンパイルします。ただし、-qpdf1-qpdf2 に変更します。 この 2 回目のコンパイルでは、最適化を微調整するために、累積されたプロファイル情報が使用されます。 結果のプログラムはプロファイル作成オーバーヘッドを含んでいないため、フルスピードで実行されます。

    プログラムを再コンパイルすることなく -qpdf1 フェーズ中に作成されたオブジェクト・ファイルをリンクするには、-qpdf2 オプションを使用することをお勧めします。 この方法を使用すると、コンパイル時間を大幅に短縮でき、-qpdf2 フェーズ中にプログラムを再コンパイルした場合と同様の最適化結果が得られます。

    注:
    • コンパイラーがこのステップでどの PDF ファイルも読み取れない場合、コンパイラーはエラー・メッセージ 1586-401 を発行しますが、コンパイルを続行します。 コンパイラーのコンパイルを停止する場合は、-qhaltonmsg=1586-401 を指定してください。
    • 特定のプログラムのコンパイル手順ではすべて、同じ最適化レベルを使用することを強くお勧めします。 そうでないと、PDF プロセスがプログラムを正しく最適化できないだけでなく、プログラムの速度を低下させるおそれがあります。 構成ファイルでの設定も含めて、最適化に影響するすべてのコンパイラー設定が一致している必要があります。
    • ソース・コードを変更し、-qpdf1 および -qpdf2 オプションを使用して、プログラムをコンパイルすることができます。古いプロファイル情報を保存しておいて、PDF プロセスの第 2 段階で使用することができます。コンパイラーから警告リストが出されますが、コンパイルは停止しません。古いプロファイル情報の古さを示す 0 から 100 までの番号が付いた通知メッセージも出されます。
    • -O4 オプション、-O5 オプション、または任意レベルの -qipa オプションが有効になっている場合に、-qpdf2 オプションをリンク・ステップで指定する一方でコンパイル・ステップでは指定しない場合、コンパイラーは警告メッセージを発行します。 このメッセージでは、すべてのプロファイル情報を取得するためプログラムを再コンパイルする必要があることが示されます。
    • -qpdf2 オプションと共に -qreport オプションを使用した場合、リスト・ファイル内にプログラムの調整に役立つ追加情報を取得することができます。この情報は、PDF Report セクションに書き込まれます。
  5. PDF 情報を削除する場合は、cleanpdf ユーティリティーを使用します。

以下の例は、-qpdf1 オプションを使用してすべてのコードをコンパイルするのではなく、最適化から最大の効果が得られるコードのみに絞って -qpdf1 によるコンパイルを行うことができることを示しています。
#Set the PDFDIR variable                     
export PDFDIR=$HOME/project_dir

#Compile most of the files with -qpdf1       
xlf -qpdf1 -O3 -c file1.f file2.f file3.f

#This file does not need optimization
xlf -c file4.f

#Non-PDF object files such as file4.o can be linked  
xlf -qpdf1 -O3 file1.o file2.o file3.o file4.o

#Run several times with different input data          
./a.out < polar_orbit.data
./a.out < elliptical_orbit.data
./a.out < geosynchronous_orbit.data

#Link all the object files into the final application   
xlf -qpdf2 -O3 file1.o file2.o file3.o file4.o
以下の例では、-qpdf2 オプションを使用したソースの再コンパイルを回避しています。
#Compile source with -qpdf1
xlf -c -qpdf1 -O3 file1.f file2.f

#Link object files
xlf -qpdf1 -O3 file1.o file2.o

#Run with one set of input data
./a.out < sample.data

#Link object files
xlf -qpdf2 -O3 file1.o file2.o