このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。
計算結果に影響しないブロックのコードの削除
以下の例では、コード ジェネレーターを使用して、計算結果に影響しないコードを削除して生成されたコードを最適化する方法を示します。最適化により、以下が実現されます。
実行速度が上がる。
ROM の消費を低減する。
例
モデル BlockReductionOptimization
では、値 1.0
の Gain ブロックは Inport ブロックと Outport ブロックの間にあります。
model = 'BlockReductionOptimization';
open_system(model);
コードの生成
モデルをビルドします。
set_param(model,'BlockReduction','off'); slbuild(model)
### Starting build procedure for: BlockReductionOptimization ### Successful completion of build procedure for: BlockReductionOptimization Build Summary Top model targets built: Model Action Rebuild Reason ============================================================================================================ BlockReductionOptimization Code generated and compiled. Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 9.9516s
このコードは、BlockReductionOptimization.c
からのコードです。
cfile = fullfile('BlockReductionOptimization_ert_rtw','BlockReductionOptimization.c'); coder.example.extractLines(cfile, '/* Model step function */',... '/* Model initialize function */', 1, 0);
/* Model step function */ void BlockReductionOptimization_step(void) { /* Outport: '<Root>/Out1' incorporates: * Inport: '<Root>/In1' */ BlockReductionOptimization_Y.Out1 = BlockReductionOptimization_U.In1; }
最適化の有効化
[コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。
[ブロック削減] チェック ボックスがオフになっている場合はオンにします。
あるいは、コマンド ライン API を使用して最適化を有効にします。
set_param(model,'BlockReduction','on');
最適化を使用したコードの生成
slbuild(model)
### Starting build procedure for: BlockReductionOptimization ### Successful completion of build procedure for: BlockReductionOptimization Build Summary Top model targets built: Model Action Rebuild Reason =========================================================================================== BlockReductionOptimization Code generated and compiled. Generated code was out of date. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 9.1736s
最適化された BlockReductionOptimization.c
からのコードは、以下のとおりです。
cfile = fullfile('BlockReductionOptimization_ert_rtw','BlockReductionOptimization.c'); coder.example.extractLines(cfile, '/* Model step function */',... '/* Model initialize function */', 1, 0);
/* Model step function */ void BlockReductionOptimization_step(void) { /* Outport: '<Root>/Out1' incorporates: * Inport: '<Root>/In1' */ BlockReductionOptimization_Y.Out1 = BlockReductionOptimization_U.In1; }
入力信号を 1.0
の値で乗算しても計算結果に影響しないため、コード ジェネレーターは Gain ブロックを生成されたコードから除外します。モデルを閉じます。
bdclose(model)
制限
以下の状況では、コード ジェネレーターでブロックを削除できません。
ブロックの出力がテスト ポイントとして構成されているかストレージ クラスをもち、ブロックの入力と出力でデータ型、実数/複素数、または幅が異なる。
ブロックのサンプル時間が非定数で、出力がルートの出力端子に接続されていて、ソースのサンプル時間が定数である。
ブロックに複数のソースがあり、そのうちのいくつかのサンプル時間が定数で、いくつかのサンプル時間が非定数である。
ブロックの出力にストレージ クラスがあり、ソースが多重化されているか、バーチャル バスであるか、ルートの出力端子に接続されているか、テスト ポイントとして構成されているか、ストレージ クラスをもつ。
ブロックの出力がブロックの入力に接続されている。
ブロックが Initialize Function サブシステム、Reset Function サブシステム、または Terminate Function サブシステム内にあり、そのサブシステムの出力がサブシステムの出力端子に接続されている。
ブロックの出力が初期条件がある Subsystem Outport ブロックに接続されている。
ブロックの出力が Initialize Function サブシステム、Reset Function サブシステム、または Terminate Function サブシステムの出力端子に接続されている。
ブロックの出力が [出力端子がバーチャルであることを確認] パラメーターが選択された出力端子に接続されている。
ブロックの出力が初期条件パラメーターがある出力端子に接続されている。
ブロックの出力が Merge ブロック、Vector Concatenate ブロック、または Matrix Concatenate ブロックに接続されている。
ブロックに調整可能な実行時パラメーターがある。
ブロックが再利用可能なサブシステム内にあり、そのサブシステムの出力が再利用可能なサブシステムの外にあるブロックに接続されている。
ブロックに連続状態がある。
ブロックに離散状態があり、状態が記録されているか非自動ストレージ クラスをもつ。
ブロックが S-Function であり、
ssSetBlockReduction
を使用してブロック削減を有効にしていない。ブロックの出力がテスト ポイントとして構成されているかストレージ クラスをもち、そのソースが別の条件付きサブシステム内のブロックである。