ループ展開のしきい値の構成
[最適化] ペインの [ループ展開のしきい値] パラメーターは、どのようなときに幅の広い信号またはパラメーターを for
ループに含めるのか、およびどのようなときにそれを信号の各要素の独立ステートメントとして生成するのかを決定します。既定のしきい値は 5 です。
たとえば、次のモデルを考えてみましょう。
Gain ブロックのゲイン パラメーターはベクトル myGainVec
です。
ループ展開のしきい値が既定値 5 に設定されていると仮定します。
myGainVec
が次のように宣言された場合について検討します。
myGainVec = [1:10];
10 要素の配列 myGainVec_P.Gain_Gain[]
は、Parameters_
データ構造体内で宣言されます。ゲイン配列のサイズは、ループ展開のしきい値を超えています。このため、Gain ブロックに対して生成されたコードは、下記のコードに示すように、model
for
ループの配列を反復します。
{ int32_T i1; /* Gain: '<Root>/Gain' */ for(i1=0; i1<10; i1++) { myGainVec_B.Gain_f[i1] = rtb_foo * myGainVec_P.Gain_Gain[i1]; } }
myGainVec
が次のように宣言された場合について検討します。
myGainVec = [1:3];
3 要素の配列 myGainVec_P.Gain_Gain[]
は、Parameters
データ構造体内で宣言されます。ゲイン配列のサイズは、ループ展開のしきい値未満です。生成されたコードは、次のコードのように、配列の各要素のインライン参照から構成されます。
/* Gain: '<Root>/Gain' */ myGainVec_B.Gain_f[0] = rtb_foo * myGainVec_P.Gain_Gain[0]; myGainVec_B.Gain_f[1] = rtb_foo * myGainVec_P.Gain_Gain[1]; myGainVec_B.Gain_f[2] = rtb_foo * myGainVec_P.Gain_Gain[2];
ループ ローリングの詳細については、変数名およびループ ローリングの探索を参照してください。
メモ
あるモデルに Stateflow® チャートまたは MATLAB Function ブロックが含まれる場合、[最適化] ペインで Stateflow 最適化のセットを適用することができます。Stateflow オプションで選択した設定は、そのモデル内の MATLAB Function ブロックにも適用されます。これは、MATLAB Function ブロックおよび Stateflow チャートが同じテクノロジーに基づいており、コード ベースを共有するためです。MATLAB Function ブロックを使用する場合、Stateflow ライセンスは不要です。
メモ
MATLAB Function ブロックに、入れ子になった 2 つの for
ループを含むコードが含まれている場合は、次のようになります。
内側のループの反復回数がしきい値未満である場合、コード ジェネレーターは最初に内側のループを展開します。次に、2 つのループの反復回数の積もしきい値未満である場合は、コード ジェネレーターは外側のループを展開します。そうでない場合、コード ジェネレーターは外側の
for
ループを生成します。内側のループの反復回数がしきい値以上である場合、コード ジェネレーターは両方の
for
ループを生成します。N 次元配列の場合、コード ジェネレーターは、ループの反復回数の積がしきい値未満になるまで、各連続ループを展開します。