プロファイル指示フィードバック (PDF) を使用して最適化を調整する。ここでは、サンプル・プログラムの実行から得られた結果が使用されて、条件付き分岐の付近および頻繁に実行されるコード・セクションでの最適化が改善されます。
PDF を使用するには、以下のステップに従ってください。
大規模なアプリケーションでは、最適化から最も利益を得ることのできるコードの領域に集中してください。アプリケーションのコードのすべてを -qpdf1 オプションでコンパイルする必要はありません。
最高のパフォーマンスを得るには、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 出力レコードにマージします。
|
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