プロファイル指示フィードバック (PDF) を使用すると、アプリケーションのパフォーマンスを通常の使用例に合うように調整することができます。コンパイラーは、分岐の頻度やコード・ブロックの実行の頻度の分析に基づいて、アプリケーションを最適化します。このプロセスは、アプリケーション全体を 2 度コンパイルする必要があるため、他のデバッグやチューニングが終了してから、アプリケーションを実稼働させる前の最後の段階の一部として使用されるようになっています。
次の図は、PDF プロセスを表しています。
まず、-qpdf1 オプションを指定して (最小最適化レベル -0 を使用) プログラムをコンパイルします。これにより、コンパイル済みプログラムをユーザーが通常使用するのと同じ方法で使用して、プロファイル・データが生成されます。次に、-qpdf2 オプションを使用して、プログラムをもう一度コンパイルします。これで、 qipa=level=0 が呼び出され、プログラムはプロファイル・データに基づいて最適化されます。
アプリケーションのすべてのコードを -qpdf1 オプションでコンパイルしなくても、 PDF プロセスの恩恵は受けられます。大規模アプリケーションでは、最適化の効果が最もよく現れるコード領域に集中することもできます。
-qpdf オプションを使用するには、次のようにします。
次のようにすれば、PDF ファイルをさらに制御することができます。
mergepdf -r 53 path1 -r 32 path2 -r 15 path3
関数呼び出しおよびブロック統計についてさらに詳しい情報を収集するには、次のようにします。
PDF ディレクトリー内の情報を消去するには、 cleanpdf ユーティリティーまたは resetpdf ユーティリティーを使用します。
次の例は、showpdf ユーティリティーで PDF を使用して、「Hello World」アプリケーションの呼び出しおよびブロック統計を表示する方法を示したものです。
プログラム・ファイル hello.c のソースは次のとおりです。
#include <stdio.h> void HelloWorld() { printf("Hello World"); } main() { HelloWorld(); return 0; }
xlc -qpdf1 -qshowpdf -O hello.c
showpdf
結果は以下のようになります。
HelloWorld(4): 1 (hello.c) Call Counters: 5 | 1 printf(6) Call coverage = 100% ( 1/1 ) Block Counters: 3-5 | 1 6 | 6 | 1 Block coverage = 100% ( 2/2 ) ----------------------------------- main(5): 1 (hello.c) Call Counters: 10 | 1 HelloWorld(4) Call coverage = 100% ( 1/1 ) Block Counters: 8-11 | 1 11 | Block coverage = 100% ( 1/1 ) Total Call coverage = 100% ( 2/2 ) Total Block coverage = 100% ( 3/3 )