showpdf によるプロファイル情報の表示

showpdf ユーティリティーを使用すると、アプリケーションから収集された以下のタイプのプロファイル情報を表示することができます。
  • ブロック・カウンターのプロファイル
  • 呼び出しカウンターのプロファイル
  • 値のプロファイル
  • キャッシュ・ミスのプロファイル (-qpdf1 フェーズで -qpdf1=level=2 オプションを指定した場合)
最初の 2 つのタイプのプロファイル情報は、テキスト・フォーマットまたは XML フォーマットのいずれかで表示できます。しかし、値のプロファイルとキャッシュ・ミスのプロファイル情報は、XML フォーマットでしか表示できません。

構文

構文図を読む構文図をスキップする
>>-showpdf--+--------+--+--------------+--+----------------+--+-------+-><
            '-pdfdir-'  '- -f--pdfname-'  '- -m--pdfmapdir-'  '- -xml-'   

パラメーター

pdfdir
プロファイル指示フィードバック (PDF) ファイルを格納するディレクトリーです。 -qpdf1 フェーズの後に PDFDIR 環境変数を変更していない場合、 PDF マップ・ファイルもこのディレクトリーに格納されます。このパラメーターを指定しない場合、コンパイラーは PDFDIR 環境変数の値をディレクトリーの名前として使用します。
pdfname
PDF ファイルの名前。このパラメーターを指定しない場合、コンパイラーは ._pdf を PDF ファイルの名前として使用します。
pdfmapdir
PDF マップ・ファイルを含むディレクトリー。このパラメーターを指定しない場合、コンパイラーは PDFDIR 環境変数の値をディレクトリーの名前として使用します。
-xml
PDF 情報の表示フォーマットを決定します。このパラメーターを指定した場合、 PDF 情報は XML フォーマットで表示されます。指定しない場合は、テキスト・フォーマットで表示されます。 値のプロファイルおよびキャッシュ・ミスのプロファイル情報は、XML フォーマットでしか表示できないため、XML フォーマットの PDF レポートは、テキスト・フォーマットのレポートよりも情報量が多くなります。

使用法

静的情報を格納する PDF マップ・ファイルは、-qpdf1 フェーズ中に生成されます。これに対して PDF ファイルは、結果として生成されたアプリケーションの実行中に生成されます。 showpdf ユーティリティーでは、PDF 情報をテキストと XML のいずれかのフォーマットで表示するために、PDF ファイルと PDF マップ・ファイルの両方を必要とします。

-qpdf1 フェーズで -qpdf1=level=2 オプションを指定した場合、複数の PDF ファイルおよび PDF マップ・ファイルが生成されることがあります。この場合は、プロファイル情報を表示するときに、PDF ファイルと PDF マップ・ファイルのペアごとに showpdf ユーティリティーを実行する必要があります。

デフォルトでは、PDF ファイルには ._pdf という名前が付けられ、PDF マップ・ファイルには ._pdf_map という名前が付けられます。PDFDIR 環境変数が設定されている場合、PDF ファイルおよび PDF マップ・ファイルは、コンパイラーによって PDFDIR で指定されたディレクトリーに配置されます。PDFDIR 環境変数を設定しなかった場合、 コンパイラーはこれらのファイルを現行作業ディレクトリーに格納します。 PDFDIR 環境変数を設定した場合に、指定したディレクトリーが存在しないと、コンパイラーから警告メッセージが出されます。 デフォルト値をオーバーライドするには、 -qpdf1=pdfname オプションを使用して、PDF ファイルおよび PDF マップ・ファイルのパスと名前を指定します。例えば、 -qpdf1=pdfname=/home/joe/func オプションを指定すると、 結果の PDF ファイルの名前は func となり、 PDF マップ・ファイルの名前は func_map となります。どちらのファイルも、 /home/joe ディレクトリーに格納されます。

-qpdf1 フェーズの後、結果のアプリケーションの実行前に PDFDIR 環境変数を変更した場合、PDF ファイルと PDF マップ・ファイルが別々のディレクトリー内に生成されます。 この場合は、この両方のファイルのディレクトリーを showpdf ユーティリティーに指定する必要があります。

注:
  • 同じコンパイル・インスタンスから、PDF ファイルと PDF マップ・ファイルを生成する必要があります。そうしないと、コンパイラーからエラーが出されます。
  • 同じプロファイル作成プロセス中に、PDF ファイルと PDF マップ・ファイルを生成する必要があります。これは、異なるプロファイル作成プロセスから生成された PDF ファイルと PDF マップ・ファイルを組み合わせて使用できないことを意味します。
  • 同じバージョンおよび PTF レベルのコンパイラーを使用して、PDF ファイルと PDF マップ・ファイルを生成する必要があります。
  • showpdf ユーティリティーは、バイナリー・フォーマットの PDF ファイルのみを受け入れます。
  • PDF_WL_ID 環境変数を使用して、ユーザー・プログラムを複数回トレーニング実行して生成された複数セットの PDF カウンターを区別できます。

以下の例では、showpdf ユーティリティーを使用して、「Hello World」アプリケーションのプロファイル情報を表示する方法を示しています。

プログラム・ファイル hello.c のソースは次のとおりです。
#include <stdio.h>  
void HelloWorld()
{
   printf("Hello World");
}
main()
{
   HelloWorld();
   return 0;
}
  1. ソース・ファイルをコンパイルします。
    xlc -qpdf1 -O hello.c
  2. 標準的なデータ・セットを 1 つ以上使用して、結果の実行可能プログラム a.out を実行します。
  3. 実行可能ファイルのプロファイル情報をテキスト・フォーマットで表示する場合は、showpdf ユーティリティーをパラメーターを指定せずに実行します。
    showpdf 
    結果は、次のようになります。
    HelloWorld(67):  1 (hello.c)
    
    Call Counters:
    4 | 1  printf(69)
    
    Call coverage = 100% ( 1/1 )
    
    Block Counters:
    2-4 | 1
    5 |
    5 | 1
    
    Block coverage = 100% ( 2/2 )
      
    -----------------------------------
    main(68):  1 (hello.c)
    
    Call Counters:
    8 | 1  HelloWorld(67)
    
    Call coverage = 100% ( 1/1 )
    
    Block Counters:
    6-9 | 1
    10 |
    
    Block coverage = 100% ( 1/1 )
    
    Total Call coverage = 100% ( 2/2 )
    Total Block coverage = 100% ( 3/3 )
    プロファイル情報を XML フォーマットで表示する場合は、showpdf ユーティリティーを -xml パラメーターを指定して実行します。
    showpdf -xml
    結果は、次のようになります。
      <?xml version="1.0" encoding="UTF-8" ?> 
    - <XLTransformationReport xmlns="http://www.ibm.com/2010/04/CompilerTransformation" version="1.0">
      - <CompilationStep name="showpdf">
        - <ProgramHierarchy>
          - <FileList>
            - <File id="1" name="hello.c">
              - <RegionList>
                  <Region id="67" name="HelloWorld" startLineNumber="2" /> 
                  <Region id="68" name="main" startLineNumber="6" /> 
                </RegionList>
              </File>
            </FileList>
          </ProgramHierarchy>
          <TransformationHierarchy /> 
        - <ProfilingReports>
          - <BlockCounterList>
            - <BlockCounter regionId="67" execCount="1" coveredBlock="2" totalBlock="2">
              - <BlockList>
                  <Block index="3" execCount="1" startLineNumber="2" endLineNumber="4" /> 
                  <Block index="2" execCount="0" startLineNumber="5" endLineNumber="5" /> 
                  <Block index="4" execCount="1" startLineNumber="5" endLineNumber="5" /> 
                </BlockList>
              </BlockCounter>
            - <BlockCounter regionId="68" execCount="1" coveredBlock="1" totalBlock="1">
              - <BlockList>
                  <Block index="3" execCount="1" startLineNumber="6" endLineNumber="9" /> 
                  <Block index="2" execCount="0" startLineNumber="10" endLineNumber="10" /> 
                </BlockList>
              </BlockCounter>
            </BlockCounterList>
          - <CallCounterList>
            - <CallCounter regionId="67" execCount="1" coveredCall="0" totalCall="0">
              - <CallList>
                  <Call name="printf" execCount="1" lineNumber="4" /> 
                </CallList>
              </CallCounter>
            - <CallCounter regionId="68" execCount="1" coveredCall="0" totalCall="0">
              - <CallList>
                  <Call name="HelloWorld" execCount="1" lineNumber="8" /> 
                </CallList>
              </CallCounter>
            </CallCounterList>
            <ValueProfileList /> 
            <CacheMissList /> 
          </ProfilingReports>
        </CompilationStep>
      </XLTransformationReport>