AI エンジン コンパイラは、インライン関数を使用して関数呼び出しのオーバーヘッドを削減できます。インライン関数は、それが呼び出された行で展開される関数です。大きな関数の場合、関数呼び出しのオーバーヘッドは、関数の実行時間に比べるとわずかです。ただし、小さな関数の場合、関数呼び出しに必要な時間は、関数のコードを実行するのに必要な時間よりも大きくなります。小さな関数の実行時間は切り替え時間よりも短いため、このオーバーヘッドは小さな関数で生じます。
インライン関数を使用する利点は、関数呼び出しのオーバーヘッドがないことです。別の利点は、コンパイラが、関数自体では不可能なコンテキスト固有の最適化を実行できることです。一方でデメリットは、レジスタの消費量が大きくなること、プログラムのサイズが大きくなること、チェックするプログラム カウンターの明確な開始および停止がないため、関数をプロファイルできないことです。
次のキーワードを使用して、インライン関数の使用法をコンパイラに対して示します。
-
inline
: このキーワードは、AI エンジン コンパイラが、インラインとマークされた関数に対して、インライン置換または関数呼び出しを自由に使用できることを示します。 -
inline __attribute__((always_inline))
または__attribute__((always_inline))
: これにより、コンパイラは関数をインライン展開します。 -
inline __attribute__((noinline))
または__attribute__((noinline))
: これにより、コンパイラは常に関数呼び出しを生成します。