Main Content

ループ展開のしきい値の構成

[最適化] ペインの [ループ展開のしきい値] パラメーターは、どのようなときに幅の広い信号またはパラメーターを for ループに含めるのか、およびどのようなときにそれを信号の各要素の独立ステートメントとして生成するのかを決定します。既定のしきい値は 5 です。

たとえば、次のモデルを考えてみましょう。

Gain ブロックのゲイン パラメーターはベクトル myGainVec です。

ループ展開のしきい値が既定値 5 に設定されていると仮定します。

myGainVec が次のように宣言された場合について検討します。

myGainVec = [1:10];

10 要素の配列 myGainVec_P.Gain_Gain[] は、Parameters_model データ構造体内で宣言されます。ゲイン配列のサイズは、ループ展開のしきい値を超えています。このため、Gain ブロックに対して生成されたコードは、下記のコードに示すように、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 次元配列の場合、コード ジェネレーターは、ループの反復回数の積がしきい値未満になるまで、各連続ループを展開します。

参考

関連するトピック