Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

coder.inline

生成されたコードで特定の関数のインライン化を制御

説明

coder.inline('always') は、生成されたコード内の現在の関数を強制的にインライン化します。インライン化する関数内に coder.inline 命令を配置します。コード ジェネレーターは、エントリポイント関数と再帰関数をインライン化しません。また、コード ジェネレーターは、parfor ループへの関数のインライン化、または parfor ループから呼び出される関数のインライン化も行いません。

coder.inline('never') は、生成コード内の現在の関数がインライン化されるのを防ぎます。MATLAB® ソース コードと生成コードの間のマッピングを単純化するときは、インライン化を回避します。

メモ

codegen (MATLAB Coder) コマンドまたは fiaccel コマンドを使用する場合に、-O disable:inline オプションを使用することで、すべての関数のインライン化を無効にできます。

codegen コマンドまたは MATLAB Coder™ アプリを使用して C/C++ コードを生成する場合、記述する関数に対して生成されるコードと MathWorks® 関数に対して生成されるコードでは、速度および可読性の要件に差異が生じる場合があります。生成コード ベースのこれら 2 つの部分に関するインライン化の動作を、それらの間の境界で個別に制御できる、その他のグローバル設定もあります。を参照してください。

coder.inline('default') は、コード ジェネレーターに対して、内部のヒューリスティックな方法を使用して現在の関数をインライン化するかどうかを指示します。通常は、ヒューリスティックな方法によって高度に最適化されたコードが生成されます。これらの最適化を微調整しなければならない場合にのみ、coder.inline を MATLAB 関数内で明示的に使用するようにしてください。

すべて折りたたむ

この例では、関数 foo は生成コードでインライン化されません。

function y = foo(x)
  coder.inline('never');
  y = x;
end

制御フロー コードでは coder.inline を使用できます。ソフトウェアで矛盾する coder.inline 命令を検出した場合、生成コードは既定のインライン経験則を使用して警告を表示します。

メモリ量の少ないシステムで実行される除算関数用のコードを生成すると想定します。生成コードでメモリ使用量を最適化するには、関数 inline_division で、スカラー除算を実行するかベクトル除算を実行するかに基づき、インライン化を手作業で制御します。

function y = inline_division(dividend, divisor)

% For scalar division, inlining produces smaller code
% than the function call itself.  
if isscalar(dividend) && isscalar(divisor)
   coder.inline('always');
else
% Vector division produces a for-loop.
% Prohibit inlining to reduce code size.
   coder.inline('never');
end

if any(divisor == 0)
   error('Cannot divide by 0');
end

y = dividend / divisor;

詳細

すべて折りたたむ

インライン化

関数呼び出しをその関数の内容 (本文) と置き換える手法です。インライン化によって関数呼び出しのオーバーヘッドは排除されますが、大きい C/C++ コードが生成される可能性があります。インライン化により、生成された C/C++ コードがさらに最適化されることになります。

参考

R2011a で導入