IPO コンパイルモデル

インテル(R) コンパイラーでは、プロシージャー間の最適化 (IPO) はマルチファイル IPO のことを指します。

IPO はインライン展開を有効にするため、主にアプリケーションのパフォーマンスを向上させます。インライン展開およびインライン展開の最低基準については、「関数のインライン展開の条件」および「コンパイラーが指示するユーザー関数のインライン展開」を参照してください。

インライン展開およびその他の最適化は、プロファイル情報によって向上します。プロファイル情報を用いたマルチファイル IPO を実行する方法は、「プロファイルに基づく最適化の例」を参照してください。

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

コンパイルフェーズ

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

特に指定しない限り、コンパイラーは IPO のコンパイルフェーズの最中に、擬似オブジェクト・ファイルをいくつか生成します。擬似オブジェクト・ファイルには、オブジェクト・コードではなく IR が含まれます。このため、実際のオブジェクト・ファイルの代わりに擬似オブジェクト・ファイルを生成すると、IPO のコンパイルフェーズに要する時間が短くなります。

各擬似オブジェクト・ファイルは、対応するソースファイルの IR を含みますが、実コードもデータも含みません。この擬似オブジェクトは、オプションを使用するか、インテル・リンカー (xild (Linux) または xilink (Windows)) を使用して、インテル・コンパイラーにリンクする必要があります。「マルチファイル IPO 実行ファイルの作成」を参照してください。

警告

インテル・リンカーを使用して擬似オブジェクト・ファイルをリンクしないと、リンクエラーが発生します。

リンクフェーズ

-ipo オプション (Linux) または /Qipo オプション (Windows) を使用してリンクすると、コンパイラーはリンカーの直前に起動されます。コンパイラーは、IR 等価物を含むオブジェクト・ファイルすべてを対象に IPO を実行します。

最初に、コンパイラーはサマリー情報を解析し、IR を含むアプリケーションの部分のコンパイルを完了します。各アプリケーションの部分をコンパイル中に、アプリケーションに関するグローバル情報を取得することで、最適化の質を向上します。

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