最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

coder.inline

パッケージ: coder

生成コードにおけるインライン化の制御

構文

coder.inline('always')
coder.inline('never')
coder.inline('default')

説明

coder.inline('always') は、生成されたコード内の現在の関数を強制的にインライン化します。それが適用される関数内で、coder.inline 命令を記述してください。コード ジェネレーターは、エントリポイント関数のインライン化、parfor ループへの関数のインライン化、または parfor ループから呼び出される関数のインライン化を行いません。

coder.inline('never') は、生成コード内の現在の関数がインライン化されるのを防ぎます。MATLAB® ソース コードと生成コードの間のマッピングを単純化するときは、インライン化を回避します。fiaccel コマンドの -O disable:inline オプションを使用することで、すべての関数のインライン化をコマンド ラインで無効にできます。

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

関数のインライン化の回避

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

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

制御フロー ステートメントでの coder.inline の使用

制御フロー コードでは 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 で導入