インテル® Fortran コンパイラー 14.0 ユーザー・リファレンス・ガイド
関数のインライン展開は、IPO で通常必要とされるプログラム全体の解析の基準を満たす必要がないため、この最適化はプロシージャー間の最適化 (IPO) で主に使用されるものの 1 つです。コンパイラーは、頻繁に実行する関数呼び出しが存在していると判断した場合、その呼び出し命令を、当該関数自体のコードに置き換えます。
関数のインライン展開は、比較的大きな関数よりも小さなユーザー関数で有利です。この最適化は、次の操作を行ってアプリケーションのパフォーマンスを向上します。
関数呼び出しのパラメーターの設定の必要性を排除する
関数の呼び出し分岐を取り除く
定数を伝播する
関数のインライン展開を行うと、関数呼び出しのランタイム・オーバーヘッドがなくなるため実行時間は短くなります。しかし、インライン展開を行うと、コードサイズやコードの複雑性が増し、コンパイル時間も長くなります。一般に、コンパイラーに関数のインライン展開を指示すると、より広いコンテキストでソースファイルが検証され、より多くの最適化の機会を見つけることができます。
[Q]ip コンパイラー・オプション (単一ファイル IPO) を指定すると、現在のソースファイル内で定義されているプロシージャーへの呼び出しに対して関数のインライン展開を行います。一方、[Q]ipo コンパイラー・オプション (複数ファイル IPO) を指定するとその他のファイルで定義されたプロシージャーへの呼び出しに対して関数のインライン展開を行います。
[Q]ip と [Q]ipo のどちらのオプションを指定した場合も、条件によってはコンパイル時間とコードサイズが著しく増える場合があります。
コンパイラーはどのルーチンをインライン展開すればプログラムのパフォーマンスに最も寄与するかを調べて選び出します。この選択は、デフォルトのヒューリスティックを使用して行われます。プロファイルに基づく最適化 (PGO) のオプション ([Q]prof-use) を使用するかどうかによって、コンパイラーが使用するインライン展開ヒューリスティックは異なります。
[Q]ip または [Q]ipo で PGO を使用する場合、コンパイラーは次のガイドラインに沿ってヒューリスティックを適用します。
デフォルト・ヒューリスティックでは、プログラムに対して収集されたプロファイル情報を基に、最も頻繁に実行される呼び出し位置に重点がおかれます。
デフォルト・ヒューリスティックを使用すると、インライン展開の最低条件を満たしている非常に小さな関数は必ずインライン展開されます。