profile-directed feedback (PDF) を介して最適化を調整する。サンプル・プログラムの実行から得られた結果を使用して、条件付き分岐の付近や頻繁に実行されるコード・セクションでの最適化を改善します。
.-nopdf2-. +-nopdf1-+ >>- -q--+-pdf1---+--------------------------------------------->< '-pdf2---'
PDF を使用するには、以下のステップに従ってください。
大きいアプリケーションでは、最適化によって得られる利益が最も大きいコードの領域に集中してください。 アプリケーションのコードのすべてを -qpdf1 オプションでコンパイルする必要は ありません。
中間ステップとして、-qpdf2 を使用して、 -qpdf1 パスによって作成されたオブジェクト・ファイルを、 -qpdf2 パスでソースを再コンパイルせずにリンクすることができます。これにより かなりの時間を節約し、大きなアプリケーションを最適化のために微調整することができます。 -qpdf2 パスで異なるオプションを使用すると、PDF 最適化バイナリーの異なるフレーバーを作成してテストすることができます。
最高のパフォーマンスを得るには、PDF を使用するときに、 すべてのコンパイルで -O3、-O4、 または -O5 オプションを使用します。
プロファイルは、現行作業ディレクトリーに配置されるか、PDFDIR 環境変数が設定されている場合は その変数によって指定されたディレクトリーに配置されます。
コンパイルと実行の時間を節約するために、PDFDIR 環境変数を必ず絶対パスに設定してください。 そうしないと、誤ったディレクトリーからアプリケーションが実行され、プロファイル・データ・ファイルが見つからなくなる可能性があります。 これが起こると、プログラムが正しく最適化されないか、またはセグメンテーション障害によって停止する場合が あります。 PDF プロセスの終了前に PDFDIR 変数の値を変更してアプリケーションを実行した場合にも、セグメンテーション障害が 起こる場合があります。
このオプションはアプリケーション全体を 2 回コンパイルすることを要求するため、他のデバッグとチューニングの終了後、アプリケーションを実稼働環境に入れる前の最終ステップの 1 つとして使用するよう意図されています。
制約事項
以下のユーティリティー・プログラム (/opt/ibmcmp/vacpp/8.0/bin/ にある) は、PDFDIR ディレクトリーの管理に使用できます。
簡単な例を以下に示します。
/* 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 -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 /* 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++ -qpdf2 -O3 file1.o file2.o file3.o file4.o
以下は、-qpdf1 および -qpdf2 オブジェクトの使用例です。
/* Set the PDFDIR variable. */ export PDFDIR=$HOME/project_dir /* Compile source with -qpdf1. */ xlc++ -c -qpdf1 -O3 file1.C file2.C /* Link in object files. */ xlc++ -qpdf1 -O3 file1.o file2.o /* Run with one set of input data. */ a.out < sample.data /* Link in the mix of pdf1 and pdf2 objects. */ xlc++ -qpdf2 -O3 file1.o file2.o
関連情報