関数のインライン展開の基準

インライン化の対象とする呼び出しは、一定の最低基準を満たしていなければなりません。呼び出しには、3 つの主要な要素があります。

呼び出しサイトとは、インライン化する関数の呼び出しのサイトです。

呼び出し元は、呼び出しサイトを含む関数です。

呼び出し先は、呼び出されてインライン化する関数です。

呼び出しサイトの最低基準:

呼び出し元の最低基準:

-Qoption,f,-ip_ninl_max_total_stats=new value

呼び出し先の最低基準:

インライン展開のルーチンの選択 (PGO 使用/PGO 非使用の両方)

以上の諸条件が満たされると、コンパイラはどのルーチンをインライン展開すればプログラムのパフォーマンスに最も寄与するかを調べて選び出します。これは、デフォルトのヒューリスティックを使用して行われます。プロファイルに基づく最適化 (-prof_use) を使用するかどうかによって、コンパイラが使用するヒューリスティックは異なります。

-ip または -ipo でプロファイルに基づく最適化を使用する場合、コンパイラは次のヒューリスティックを使用します:

-ip または -ipo でプロファイルに基づく最適化を使用しない場合、コンパイラは次のヒューリスティックを使用します: インライン展開が最終的なプログラムのサイズを増加しない場合、関数をインライン展開します。

インライン展開とプリエンプション

関数のプリエンプションとは、ランタイム時にその関数を実装するコードを、他のコードで置換することです。関数をプリエンプトすると、関数の元のバージョンではなく置換後の新しいバージョンが実行されます。プリエンプションを使用して、関数のコードにエラーのあるバージョンや効率の悪いバージョンを、正しいバージョンまたは改善されたバージョンに置き換えることができます。

コンパイラは、-ip がオンの場合には外部からアクセスできる関数はすべてプリエンプトされる可能性があり、したがってインライン展開の対象にならないものとみなします。これは、現時点では、-ip がオンの場合には内部プロシージャを除くすべての Fortran サブプログラムがインライン化できないことを意味します。

ただし、-ipo-ipo_obj をファイルごとに使用した場合には、関数のインライン化を行うことができます。「実際のオブジェクト・ファイルの生成」を参照してください。