プロシージャー間分析 (-qipa)

プロシージャー間分析 (IPA) を使用すると、コンパイラーは異なるファイルにまたがった最適化を行うことが でき (全プログラム分析)、有効なパフォーマンス向上をもたらします。 プロシージャー間分析はコンパイル・ステップでのみ、またはコンパイルおよびリンク・ステップで指定できます (全プログラム ・モード)。 全プログラム・モードは、最適化の有効範囲をプログラム単位全体に拡張し、実行可能または共用オブジェクトに することができます。 全プログラム IPA 分析は、大きなプログラムのコンパイルまたはリンク時に、かなりのメモリー量と時間を消費します。

IPA は -qipa オプションによって使用可能になります。 最も一般的に使用されるサブオプションの効果を以下に要約します。


一般に使用される -qipa サブオプション
サブオプション 動作
level=0 プログラム区分化と単純プロシージャー間最適化。 これは以下から構成されます。
  • 標準ライブラリーの自動認識。
  • 静的にバインドされた変数およびプロシージャーのローカリゼーション。
  • 呼び出し関係に応じたプロシージャーの区分化とレイアウト。 呼び出し類縁性 とも呼ばれます。 (相互に頻繁に呼び出すプロシージャーは、メモリー内で近くに置かれます。)
  • 一部の最適化の有効範囲の拡張 (特にレジスター割り振り)。
level=1 インライン化とグローバル・データ・マッピング。 特に以下を行います。
  • プロシージャーのインライン化。
  • 参照類縁性に応じた静的データの区分化とレイアウト。 (ともに頻繁に参照されるデータは、メモリー内で近くに置かれます。)
-qipa が指定されたときは、これがデフォルトになります。
level=2 グローバル別名分析、特殊化、プロシージャー間データ・フロー。
  • 全プログラム別名分析。 このレベルには、ポインター間接参照と間接関数呼び出しの明確化と、関数呼び出しの副次作用に関する情報の改良が 含まれます。
  • 集約的プロシージャー内最適化。 これは、値の番号付け、コード伝播および単純化、条件への、またはループからのコード動作、冗長度の除去の かたちをとります。
  • プロシージャー間定数伝搬、不要コード除去、ポインター分析。
  • プロシージャー特殊化 (クローン作成)。
inline=inline-options インライン化の正確なユーザー制御を提供します。
fine_tuning -qipa= の他の値では、ライブラリー・コードの 動作の指定、プログラム区分化の調整、ファイルからのコマンド読み取りなどの能力が提供されます。

-qipa を最大限に活用する

あらゆるものを -qipa でコンパイルする必要はありませんが、可能な限り 多くのプログラムにこれを適用するようにしてください。 以下にいくつかの提案を示します。

関連情報:
IBM Copyright 2003