メインコンテンツ

余分なローカル変数の削除 (式の畳み込み)

式を単一式に畳み込むことを指定する

モデル コンフィギュレーション ペイン: [コード生成] / [最適化]

説明

[余分なローカル変数の削除 (式の畳み込み)] パラメーターは、モデル内の個々のブロックに対して別々のコード ステートメントとストレージ宣言を行う代わりに、ブロック計算を単一式に畳み込むかどうかを指定します。

"式の畳み込み" では、コードを最適化して、ブロック出力での中間結果の計算や、そのような中間結果の一時的なバッファーや変数への保存を最小にします。式の畳み込みは生成コードの効率を高めるため、手動で最適化されたコードに勝る結果を達成することもしばしばあります。多くの場合、モデル計算のすべてのグループを高度に最適化された 1 行のコードに収められます。

独自のインライン S-Function ブロックで式の畳み込みを使用できます。詳細については、式の畳み込みをサポートする S-Functionを参照してください。

カテゴリ: 最適化

依存関係

このパラメーターは [信号ストレージの再利用] を選択すると有効になります。

設定

on (既定値) | off
オン
  • 式の畳み込みを有効にします。

  • ローカル変数を削除し、情報をメイン コード ステートメントに取り込みます。

  • コードの可読性と効率を高めます。

オフ

式の畳み込みを無効にします。

すべて展開する

この例では、式の畳み込みを使用したコードの生成方法を示します。

次のモデル例を考えます。2 つの入力は 2 つの Gain ブロックに接続され、それらが Product ブロックへの入力を提供します。

Model containing two Gain blocks that lead to a Product block.

式の畳み込みがオフのときは、explfld.c ファイル内に、コード ジェネレーターが以下のコードを生成します。

/* Model step function */
void exprfld_step(void)
{
  /* Gain: '<Root>/Gain' incorporates:
   *  Inport: '<Root>/In1'
   */
  exprfld_B.S1 = exprfld_P.Gain_Gain * exprfld_U.i1;
 
  /* Gain: '<Root>/Gain1' incorporates:
   *  Inport: '<Root>/In2'
   */
  exprfld_B.S2 = exprfld_P.Gain1_Gain * exprfld_U.i2;
 
  /* Outport: '<Root>/Out1' incorporates:
   *  Product: '<Root>/Product'
   */
  exprfld_Y.Out1 = exprfld_B.S1 * exprfld_B.S2;
}

両方の Gain ブロックについて別々のコード ステートメントがあります。最終出力の前に、これらのコード ステートメントによって Gain ブロックに対する一時的な結果が計算されます。

モデルで式の畳み込みを有効にしてから、コードを再生成します。式の畳み込みを使用すると、コード ジェネレーターは expfld.c ファイルに示すように 1 行の出力演算を生成します。生成されたコメントには式に現れるブロック パラメーターが記載されています。

/* Model step function */
void exprfld_step(void)
{
  /* Outport: '<Root>/Out1' incorporates:
   *  Gain: '<Root>/Gain'
   *  Gain: '<Root>/Gain1'
   *  Inport: '<Root>/In1'
   *  Inport: '<Root>/In2'
   *  Product: '<Root>/Product'
   */
  exprfld_Y.Out1 = 
     exprfld_P.Gain_Gain * 
     exprfld_U.i1 * 
     (exprfld_P.Gain1_Gain * exprfld_U.i2);
}

推奨設定

アプリケーション設定
デバッグオフ
トレーサビリティシミュレーションや開発時には影響なし
オフ (量産コード生成時)
効率性オン
安全対策影響なし

プログラムでの使用

パラメーター: ExpressionFolding
型: 文字ベクトル
値: 'on' | 'off'
既定の設定: 'on'

バージョン履歴

R2006a より前に導入

参考