ブロック出力時の中間結果の計算と保存の最小化
式の畳み込み
”式の畳み込み”では,コードを最適化して,ブロック出力での中間結果の計算や,そのような中間結果の一時的なバッファーや変数への保存を最小にします。式の畳み込みがオンのときは、モデル内の個々のブロックに対して別々のコード ステートメントとストレージ宣言を行う代わりに、コード ジェネレーターはブロック演算を単一の式に折り畳み (畳み込み) ます。式の畳み込みは、ほとんどの Simulink®ブロックでサポトされています。
式の畳み込みは生成コードの効率を高めるため,手動で最適化されたコードに勝る結果を達成することもしばしばあります。多くの場合,モデル計算のすべてのグルプを高度に最適化された1行のコドに収められます。
独自の电子邮箱ンラ电子邮箱ンs -命令功能ブロックで式の畳み込みを使用できます。詳細にいては,式の畳み込みをサポトするS-Functionを参照してください。
モデル例
コドの生成
式の畳み込みがオフのときは,explfld.c
ファ,コ。
/*模型步长函数*/ void exprfld_step(void){/*增益:'<根>/增益'合并:*导入:'<根>/In1' */ exprfld_B。S1 = exprfld_P。Gain_Gain * exprfld_U.i1;/*增益:'<根>/Gain1'合并:*导入:'<根>/In2' */ exprfld_B。S2 = exprfld_P。Gain1_Gain * exprfld_U.i2;/*输出端口:'<根>/Out1'合并:* Product: '<根>/Product' */ exprfld_Y。Out1 = exprfld_B。S1 * exprfld_B.S2;}
両方の增益ブロックに。最終出力の前に,これらのコードステートメントによって获得ブロックに対する一時的な結果が計算されます。
最適化の有効化
既定の設定では,式の畳み込みはオンになっています。既存のモデルで式の畳み込みがオンになっているかどうか確認するには,次の手順に従います。
式の畳み込みは,ロ,カル変数を含む式に対してのみ作用するため,[コンフィギュレションパラメタ]、[信号ストレジの再利用]パラメタがオンになっている場合にのみ使用できます。[信号ストレジの再利用]パラメタを有効にします。
[信号ストレジの再利用]を選択すると,既定の設定で[ロカルなブロックの出力を有効にする]、[ロカルブロック出力の再利用]および[余分なロカル変数の削除(式の畳み込み)]パラメタがすべてオンになります。
最適化を使用したコドの生成
式の畳み込みを使用すると,コドジェネレタはexpfld.c
ファ邮箱ルに示すように1行の出力演算を生成します。生成されたコメントには式に現れるブロックパラメタが記載されています。
/*模型步长函数*/ void exprfld_step(void) {/* Outport: '<根>/Out1'合并:*增益:'<根>/增益' *增益:'<根>/Gain1' *导入:'<根>/In1' *导入:'<根>/In2' * Product: '<根>/Product' */ exprfld_Y。Out1 = exprfld_P。* * * * * *i1 * (exprfld_P;Gain1_Gain * exprfld_U.i2);}
さらに複雑なモデルの文脈での式の畳み込み例を見るには,rtwdemo_slexprfold
をクリックするか,コマンドプロンプトで次のコマンドを入力してください。
rtwdemo_slexprfold
詳細にいては,生成されたコドにおけるロカルブロック出力の有効化と再利用を参照してください。
参考
信号存储复用|重用本地块输出|启用本地块输出|消除多余的局部变量(表达式折叠)