プロシージャー間分析の使用

プロシージャー間分析 (IPA) を使用すると、コンパイラーに、複数の異なるファイル間の最適化 (プログラム全体の分析) ができるようになり、その結果、パフォーマンスが大幅に向上します。プロシージャー間分析は、コンパイル・ステップのみ、あるいはコンパイル・ステップとリンク・ステップの両方 (「プログラム全体」モード) で、指定できます。プログラム全体モードは、最適化の範囲をプログラム単位全体にまで拡張するモードで、実行可能オブジェクトの場合も共用オブジェクトの場合もあります。IPA はコンパイル時間をかなり増大するので、 IPA の使用は、開発過程の最終的なパフォーマンス調整段階に限定する方がよいでしょう。

IPA は、-qipa オプションを指定して使用可能にします。最も一般的に使用されるサブオプションとその効果を、次の表に示します。サブオプションおよび構文の完全セットについては、 -qipa で説明しています。

表 12. 一般に使用される -qipa のサブオプション

サブオプション 振る舞い
level=0 プログラム区画と簡単なプロシージャー間の最適化。その内容は次のとおりです。
  • 標準ライブラリーの自動認識。
  • 静的にバインドされた変数およびプロシージャーのローカライズ。
  • 呼び出し関係によるプロシージャーの区分化およびレイアウト。 (相互に頻繁に呼び出すプロシージャーは、メモリー内の比較的近いところにまとめて配置されます。)
  • 一部の最適化、特にレジスターの割り振りの拡大。
level=1 インライン化およびグローバル・データ・マッピング。主な機能は次のとおりです。
  • プロシージャーのインライン化。
  • 参照の類縁性による、静的データの区分化およびレイアウト。 (頻繁に合わせて参照されるデータは、メモリー内の比較的近いところにまとめて配置されます。)
-qipa オプションでサブオプションを指定しない場合は、これがデフォルト・レベルになります。
level=2 グローバル別名分析、特殊化、プロシージャー間データ・フロー:
  • プログラム全体の別名分析。このレベルには、ポインター間接参照と間接関数呼び出しの明確化、および関数呼び出しの副次作用に関する情報の細分が含まれます。
  • 集中的なプロシージャー間最適化。これは、値の番号付け、コードの伝搬および単純化、条件へのコードの移動またはループ外へのコードの移動、冗長の除去という形で行われます。
  • プロシージャー間の定数伝搬、デッド・コードの除去、ポインター分析、および関数間のコードの移動。
  • プロシージャーの特殊化 (クローン作成)。
inline=variable 関数のインライン化が正確に制御できるようになります。
fine_tuning -qipa には、ほかに、ライブラリー・コードの振る舞いを指定する機能、プログラムの区分化を調整する機能、ファイルからコマンドを読み取る機能などを提供する値があります。

-qipa の最大活用

-qipa を指定してすべてをコンパイルする必要はありませんが、プログラムのできる限り多くの部分に適用してみてください。以下は提案事項です。

IBM Copyright 2003