最適化の機会を診断するためのコンパイラー・レポートの使用

-qlistfmt オプションを使用すると、プログラムに対してどのような最適化が行われたかを詳しく示す、XML または HTML フォーマットのコンパイラー・レポートを生成できます。genhtml ツールを使用して、既存の XML レポートを HTML フォーマットに変換することもできます。この情報を使用して、アプリケーションのコードを理解し、コードを調整してパフォーマンスをさらに向上させることができます。

XML フォーマットのコンパイラー・レポートは、XSLT をサポートするブラウザーで表示できます。スタイルシート・サブオプション -qlistfmt=xml=all:stylesheet=xlstyle.xsl を指定してコンパイルすると、 XML を読みやすくするスタイルシートへのリンクがレポートに組み込まれ、コードをより効果的に最適化するための情報が得られます。 また、この情報を構文解析するためのツールを作成することもできます。

デフォルトでは、このレポートの名前は a.html (HTML フォーマット) および a.xml (XML フォーマット) です。-qlistfmt=filename オプションを使用すると、このデフォルト名とは異なる名前を指定できます。

インライン・レポート

-qinline と、-qlistfmt=xml=inlines-qlistfmt=html=inlines-qlistfmt=xml、または -qlistfmt=html のいずれかを指定してコンパイルした場合、生成されるコンパイラー・レポートには、コンパイル中に試行されたインライン化のリストが含まれます。このレポートには、試行のタイプとその結果も示されます。

コンパイラーがインライン化を試行した関数ごとに、インライン化が成功したかどうかが示されます。レポートには、正常にインライン化されなかった名前付き関数の説明が任意の数含まれていることがあります。説明の例をいくつか示します。
  • FunctionTooBig: 関数が大きすぎてインライン化できません。
  • RecursiveCall: 関数が再帰的であるためインライン化されません。
  • ProhibitedByUser: ユーザー指定のプラグマまたはディレクティブが理由で インライン化が行われませんでした。
  • CallerIsNoopt: 呼び出し元が最適化なしでコンパイルされたため、インライン化が行われませんでした。
  • WeakAndNotExplicitlyInline: 呼び出し側関数が弱く、インラインとしてマークが付けられていません。

表示される可能性がある説明を網羅したリストについては、XML スキーマ・ヘルプ・ファイル XMLContent.html 内の Inline optimization types セクションを参照してください。このファイルは、日本語版と中国語版の XMLContent-Japanese.utf8.html および XMLContent-Chinese.utf8.html も格納されている /opt/IBM/xlc/13.1.0/listings/ ディレクトリーにあります。

ループ変換

-qhot と、-qlistfmt=xml=transforms-qlistfmt=html=transforms-qlistfmt=xml、または -qlistfmt=html のいずれかを指定してコンパイルした場合、生成されるコンパイラー・レポートには、コンパイル時にそのファイル内の全ループで実行された変換のリストが含まれます。レポートでは、 変換が行われなかったケースについてはその理由もリストされます。
  • ループが自動的に並列化できない理由
  • ループのアンロールができない理由
  • SIMD ベクトル化に失敗した理由

表示される可能性がある変換上の問題を網羅したリストについては、XML スキーマ・ヘルプ・ファイル XMLContent.html 内の Loop transformation types セクションを参照してください。このファイルは、日本語版と中国語版の XMLContent-Japanese.utf8.html および XMLContent-Chinese.utf8.html も格納されている /opt/IBM/xlc/13.1.0/listings/ ディレクトリーにあります。

データの再編成

-qhot と、-qlistfmt=xml=data-qlistfmt=html=data-qlistfmt=xml、または -qlistfmt=html のいずれかを指定してコンパイルした場合、生成されるコンパイラー・レポートには、コンパイル時にプログラムで実行されたデータ再編成のリストが含まれます。データ再編成の例として、以下のものがあります。
  • 配列分割
  • 配列合体
  • 配列インターリービング
  • 配列入れ替え
  • メモリー・マージ

これらの再編成ごとに、 データ名、ファイル名、行番号、および領域名に関する詳細が レポートに記載されます。

Profile-Directed Feedback レポート

-qpdf2 と、 -qlistfmt=xml=pdf-qlistfmt=html=pdf-qlistfmt=xml、または -qlistfmt=html のいずれかを指定してコンパイルした場合、生成されるコンパイラー・レポートには、以下の情報が含まれます。
  • ループの繰り返し数
  • ブロック数と呼び出し数
  • キャッシュ・ミス (-qpdf1=level=2 でコンパイルした場合)