coder.unroll
各ループ反復でループ本体のコピーを作成することで、for
ループを展開
説明
coder.unroll()
は for
ループを展開します。coder.unroll
呼び出しは、展開する for
ループの直前で単独行に記述しなければなりません。
生成コード内で for
ループを生成する代わりに、ループ展開は各ループ反復で for
ループ本体のコピーを作成します。各反復で、ループ インデックスは定数になります。ループを展開するには、コード ジェネレーターは for-
ループの範囲を決定できなければなりません。
小規模で詰まったループの場合、展開によってパフォーマンスが向上します。ただし、大規模なループの場合、展開によってコード生成時間が大幅に増加し、非効率なコードが生成される可能性があります。
コード生成の範囲外では、関数 coder.unroll
は無視されます。
例
入力引数
ヒント
場合によっては、コード ジェネレーターは
coder.unroll
を使用していない場合でもfor
ループを展開します。たとえば、for
ループが異種混合 cell 配列またはvarargin
かvarargout
へのインデックス付けを行う場合、コード ジェネレーターはループを展開します。ループを展開することで、コード ジェネレーターは各ループ反復のインデックスの値を決定できます。コード ジェネレーターはヒューリスティックな方法を使用してfor
ループを展開するタイミングを判断します。展開が保証されていることをヒューリスティックな方法で特定できない場合や、ループの反復回数が上限を超えた場合、コード生成に失敗します。このような場合、coder.unroll
を使用してループ展開を強制的に実行できます。for ループ内の varargin または varargout のインデックスが一定でないを参照してください。
拡張機能
バージョン履歴
R2011a で導入