関数のインライン展開の条件

関数のインライン展開を行うと、関数呼び出しのランタイム・オーバーヘッドがなくなるため実行時間は短くなります。しかし、インライン展開を行うと、ほとんどの場合、コードのサイズが増加し、コードが複雑になり、コンパイル時間も長くなります。

インテル(R) コンパイラーでは、関数のインライン展開は、大きな関数よりも小さなユーザー関数で行われます。コンパイラーは、3 つのメイン・コンポーネントの条件が以下の条件と一致した場合にのみ関数をインライン展開することができます。

インライン展開のルーチンの選択

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

-ip または -ipo (Linux)、/Qip または /Qipo (Windows) で PGO を使用する場合、コンパイラーは次のヒューリスティックを使用します。

プラットフォーム

コマンド

Linux

-Qoption,c,-ip_ninl_max_stats=n

Windows

/Qoption,c,-ip_ninl_max_stats=n

n は新しい値です。

inline または __inline のようにユーザーに宣言される関数には、より高い制限があります。

Qoption 指定子の使用」および「プロファイルに基づく最適化の概要」を参照してください。

-ip または -ipo (Linux)、/Qip または /Qipo (Windows) で、PGO を使用しない場合、コンパイラーは、効果の低いインライン展開ヒューリスティック (インライン展開で最終のプログラムのサイズが増えない場合に関数をインライン展開する) を使用します。

コンパイラーは、Qoption 指定子を使用するいくつかの代案を提示します。詳細は、「デベロッパーが指示するユーザー関数のインライン展開」を参照してください。

インライン展開 (Linux)

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

PGO (Windows)

コンパイラーは、ソースコードの特性を使用して、最も頻繁に実行される関数呼び出しを推定します。上記で述べたように、この推定は PGO ベースのヒューリスティックに適用されます。ソースの静的特性に基づいた、頻度の推定は、必ずしも正確であるとは限りません。従って、PGO なしで、/Qip および /Qipo を使用すると、コンパイル時間はより長くなり、アプリケーションの実行速度は遅くなることがあります。