pdf1、pdf2

C に適用 C++ に適用

目的

プロファイル指示フィードバック (PDF) を使用して最適化を調整する。ここでは、サンプル・プログラムの実行から得られた結果が使用されて、条件付き分岐の付近および頻繁に実行されるコード・セクションでの最適化が改善されます。

構文


構文図

PDF を使用するには、以下のステップに従ってください。

  1. -qpdf1 オプションを指定して、プログラム内のソース・ファイルの一部または全部をコンパイルする。少なくとも -O2 最適化オプションを指定する必要があり、また同様に、少なくとも有効な -O2 でリンクする必要もあります。後で同じオプションを使用する必要があるため、ファイルのコンパイルに使用するコンパイラー・オプションには特に注意してください。

    大規模なアプリケーションでは、最適化から最も利益を得ることのできるコードの領域に集中してください。アプリケーションのコードのすべてを -qpdf1 オプションでコンパイルする必要はありません。

  2. 一般的なデータ・セットを使用してプログラムを一通り実行する。プログラムは、終了時にプロファイル情報を記録します。プログラムは、異なるデータ・セットで複数回実行することができます。また、プロファイル情報が累積されるため、分岐の頻度およびコードのブロックの実行頻度が正確にカウントされます。

    重要:
    終了したプログラムの通常の実行中に使用されるデータのうち、代表的なデータを使用してください。
  3. 前と同じコンパイラー・オプションを使用してプログラムを再リンクする。ただし、-qpdf1-qpdf2 に変更してください。 -L-l、およびその他いくつかのオプションはリンカー・オプションであり、それらはこの時点で変更できます。この 2 番目のコンパイルでは、累積されたプロファイル情報を使用して最適化が微調整されます。結果として得られるプログラムにはプロファイルのオーバーヘッドが含まれないため、フルスピードで実行されます。

最高のパフォーマンスを得るには、PDF を使用するときに、すべてのコンパイルで -O3-O4、または -O5 オプションを使用します。

プロファイルは、現行作業ディレクトリーに配置されるか、PDFDIR 環境変数が設定されている場合はその変数によって指定されたディレクトリーに配置されます。

コンパイルと実行の時間を節約するために、PDFDIR 環境変数を必ず絶対パスに設定してください。そうでない場合、誤ったディレクトリーからアプリケーションが実行され、プロファイル・データ・ファイルが見つからなくなる可能性があります。これが起こると、プログラムが正しく最適化されないか、またはセグメンテーション障害によって停止する場合があります。 PDF プロセスの終了前に PDFDIR 変数の値を変更してアプリケーションを実行した場合にも、セグメンテーション障害が起こる場合があります。

このオプションではアプリケーション全体を 2 回コンパイルする必要があるため、他のデバッグおよび調整が終了した後の、アプリケーションを実動に供する前の最後のステップの 1 つとして使用するようにしてください。

制約事項

以下のユーティリティー・プログラムは、/usr/xlopt/bin に存在し、PDFDIR ディレクトリーの管理に使用できます。

cleanpdf cleanpdf [pathname]

pathname ディレクトリーからプロファイル情報をすべて除去します。 pathname を指定しない場合は PDFDIR ディレクトリーから、 PDFDIR を設定していない場合は現行ディレクトリーから除去します。プログラムを変更してから PDF 処理を再度行う場合は、プロファイル情報を除去すると実行時のオーバーヘッドが減少します。

特定のアプリケーション用 PDF 処理を終了した場合にのみ、cleanpdf を実行します。そうでない場合、そのアプリケーションで PDF の使用を再開したい場合は、-qpdf1 で再度すべてのファイルを再コンパイルする必要があります。

 

mergepdf mergepdf [-r scaling] input {[-r scaling] input} ... --o output [-n] [-v]

2 つ以上の PDF レコードを単一 PDF 出力レコードにマージします。

-r scaling
PDF レコード・ファイルのスケーリング率を指定します。この値は、ゼロ以上でなければならず、整数または浮動小数点値のいずれかにできます。指定されていない場合は、比率は 1.0 と見なします。

record
PDF 入力レコード・ファイル、または PDF レコード・ファイルを含むディレクトリーの名前を指定します。

-o output
PDF 出力レコード・ファイル、またはマージされる出力が書き込まれるディレクトリーの名前を指定します。

-n
指定されると、PDF レコード・ファイルは正規化されません。指定されない場合は、 mergepdf が、ユーザー定義の位取り係数を適用する前に、内部で計算した比率に基づいてレコードを正規化します。

-v
冗長モードを指定し、内部およびユーザー指定のスケーリング率をスクリーンに表示します。
resetpdf resetpdf [pathname]

上記の cleanpdf [pathname] と同様。

 

showpdf showpdf

プログラムの実行中に実行されたすべてのプロシージャーの呼び出しおよびブロック数を表示します。このコマンドを使用するには、最初にコマンド行で -qpdf1 および -qshowpdf コンパイラー・オプションを両方とも指定して、使用しているアプリケーションをコンパイルする必要があります。

簡単な例を以下に示します。

/* Set the PDFDIR variable.                     */
export PDFDIR=$HOME/project_dir
 
/* Compile all files with -qpdf1.               */
xlc++ -qpdf1 -O3 file1.C file2.C file3.C
 
/* Run with one set of input data.              */
a.out <sample.data 
 
/* Recompile all files with -qpdf2.             */
xlc++ -qpdf2 -O3 file1.C file2.C file3.C
 
/* The program should now run faster than 
   without PDF if the sample data is typical.   */

具体的な例を以下に示します。

/* Set the PDFDIR variable.                     */
export PDFDIR=$HOME/project_dir
 
/* Compile most of the files with -qpdf1.       */
xlc++ -qpdf1 -O3 -c file1.C file2.C file3.C
 
/* This file is not so important to optimize.
xlc++ -c file4.C
 
/* Non-PDF object files such as file4.o can be linked in.  */
xlc++ -qpdf1 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
 
/* No need to recompile the source of non-PDF object files (file4.C). */
xlc++ -qpdf2 -O3 file1.C file2.C file3.C
 
/* Link all the object files into the final application.   */
xlc++ file1.o file2.o file3.o file4.o
 

関連参照

コンパイラーのコマンド行オプション
ipa
O、optimize
showpdf IBM Copyright 2003