IPO コンパイル・モデル

このセクションのトピックでは、IPO という言葉はマルチファイル IPO のことを指します。

-ipo オプションを使用した場合、コンパイラはプログラムの個々のプログラム・モジュールから情報を収集します。コンパイラはこの情報を使用して、複数のモジュール全体にわたって最適化を行います。この最適化を行うには、-ipo オプションをコンパイル・フェーズとリンケージ・フェーズの両方で使用します。

IPO の主な利点の 1 つは、より多くのインライン展開を有効にできることです。インライン展開およびインライン展開の最低基準については、「関数のインライン展開の基準」および「ユーザ関数のインライン展開の制御」を参照してください。インライン展開およびその他の最適化は、プロファイル情報によって向上します。プロファイル情報を用いたマルチファイル IPO を実行する方法は、「プロファイルに基づく最適化の例」を参照してください。

コンパイル・フェーズ

各ソースファイルがコンパイルされるたびに、コンパイラはソースコードの中間表現 (IR) を擬似オブジェクト・ファイルに格納します。このオブジェクト・ファイルには、最適化に使うサマリ情報が含まれています。

特に指定しない限り、コンパイラは、マルチファイル IPO のコンパイル・フェーズの最中に、擬似オブジェクト・ファイルをいくつか生成します。実際のオブジェクト・ファイルの代わりに擬似オブジェクト・ファイルを生成すると、マルチファイル IPO のコンパイル・フェーズに要する時間が短くなります。各擬似オブジェクト・ファイルは、対応するソースファイルの IR を含みますが、実コードもデータも含みません。この擬似オブジェクトは、ifort-ipo オプションを使用するか xild ツールを使用してコンパイラにリンクする必要があります。(「xild を使用したマルチファイル IPO 実行ファイルの生成」を参照してください。)


ifort
および -ipo または xild を使用して擬似オブジェクト・ファイルをリンクしないとリンケージ・エラーが発生します。場合によっては、擬似オブジェクト・ファイルを使用できない場合があります。詳細については、「実際のオブジェクト・ファイルの生成」を参照してください。

リンケージ・フェーズ

リンカを起動する際に、コマンドラインに -ipo を追加すると、コンパイラはリンカの直前に起動されます。IPO は、IR を含むオブジェクト・ファイルすべてを対象にして実行されます。最初に、コンパイラはすべてのサマリ情報を解析し、IR を含むアプリケーションの部分をコンパイルします。各アプリケーションの部分をコンパイル中に、アプリケーションに関するグローバル情報を取得することで、最適化の質を向上します。

 
スタティック・ライブラリ (.a ファイル) についてはマルチファイル IPO は利用できません。詳細については、「実際のオブジェクト・ファイルの生成」を参照してください。

-ipo を指定すると、ドライバとコンパイラで自動的にプログラム全体を検出できるようになります。プログラム全体を検出すれば、プロシージャ間の定数伝播、スタックフレームのアライメント、データ・レイアウト、共通ブロックのパディングといった最適化をもっと効率よく実行しますが、削除される不要な関数の数も増えます。このオプションは安全です。