Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

計算結果に影響しないブロックのコードの削除

以下の例では、コード ジェネレーターを使用して、計算結果に影響しないコードを削除して生成されたコードを最適化する方法を示します。最適化により、以下が実現されます。

  • 実行速度が上がる。

  • ROM の消費を低減する。

モデル rtwdemo_blockreduction では、値 1.0 の Gain ブロックは Inport ブロックと Outport ブロックの間にあります。

model = 'rtwdemo_blockreduction';
open_system(model);

コードの生成

ビルドと検査プロセス用に一時フォルダーを作成します。

currentDir=pwd;
[~,cgDir]=rtwdemodir();

モデルを作成します。

set_param(model,'BlockReduction','off');
slbuild(model)
### Starting build procedure for: rtwdemo_blockreduction
### Successful completion of build procedure for: rtwdemo_blockreduction

Build Summary

Top model targets built:

Model                   Action                       Rebuild Reason                                    
=======================================================================================================
rtwdemo_blockreduction  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 15.863s

このコードは、rtwdemo_blockreduction.c からのコードです。

cfile = fullfile(cgDir,'rtwdemo_blockreduction_ert_rtw','rtwdemo_blockreduction.c');
rtwdemodbtype(cfile, '/* Model step function */',...
    '/* Model initialize function */', 1, 0);
/* Model step function */
void rtwdemo_blockreduction_step(void)
{
  /* Outport: '<Root>/Out1' incorporates:
   *  Gain: '<Root>/Gain'
   *  Inport: '<Root>/In1'
   */
  rtwdemo_blockreduction_Y.Out1 = 1.0 * rtwdemo_blockreduction_U.In1;
}

最適化の有効化

  1. [コンフィギュレーション パラメーター] ダイアログ ボックスを開きます。

  2. [ブロック削減] チェック ボックスがオフになっている場合はオンにします。

あるいは、コマンド ライン API を使用して最適化を有効にします。

set_param(model,'BlockReduction','on');

最適化を使用したコードの生成

slbuild(model)
### Starting build procedure for: rtwdemo_blockreduction
### Successful completion of build procedure for: rtwdemo_blockreduction

Build Summary

Top model targets built:

Model                   Action                       Rebuild Reason                   
======================================================================================
rtwdemo_blockreduction  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 12.032s

最適化された rtwdemo_blockreduction.c からのコードは、以下のとおりです。

cfile = fullfile(cgDir,'rtwdemo_blockreduction_ert_rtw','rtwdemo_blockreduction.c');
rtwdemodbtype(cfile, '/* Model step function */',...
    '/* Model initialize function */', 1, 0);
/* Model step function */
void rtwdemo_blockreduction_step(void)
{
  /* Outport: '<Root>/Out1' incorporates:
   *  Inport: '<Root>/In1'
   */
  rtwdemo_blockreduction_Y.Out1 = rtwdemo_blockreduction_U.In1;
}

入力信号を 1.0 の値で乗算しても計算結果に影響しないため、コード ジェネレーターは Gain ブロックを生成されたコードから除外します。モデルを閉じてクリーンアップします。

bdclose(model)
rtwdemoclean;
cd(currentDir)

制限

以下の状況では、コード ジェネレーターでブロックを削除できません。

  • ブロックの出力がテスト ポイントとして構成されているかストレージ クラスをもち、ブロックの入力と出力でデータ型、実数/複素数、または幅が異なる。

  • ブロックのサンプル時間が非定数で、出力がルートの出力端子に接続されていて、ソースのサンプル時間が定数である。

  • ブロックに複数のソースがあり、そのうちのいくつかのサンプル時間が定数で、いくつかのサンプル時間が非定数である。

  • ブロックの出力にストレージ クラスがあり、ソースが多重化されているか、バーチャル バスであるか、ルートの出力端子に接続されているか、テスト ポイントとして構成されているか、ストレージ クラスをもつ。

  • ブロックの出力がブロックの入力に接続されている。

  • ブロックが Initialize Function サブシステム、Reset Function サブシステム、または Terminate Function サブシステム内にあり、そのサブシステムの出力がサブシステムの出力端子に接続されている。

  • ブロックの出力が初期条件がある Subsystem Outport ブロックに接続されている。

  • ブロックの出力が Initialize Function サブシステム、Reset Function サブシステム、または Terminate Function サブシステムの出力端子に接続されている。

  • ブロックの出力が [出力端子がバーチャルであることを確認] パラメーターが選択された出力端子に接続されている。

  • ブロックの出力が初期条件パラメーターがある出力端子に接続されている。

  • ブロックの出力が Merge ブロック、Vector Concatenate ブロック、または Matrix Concatenate ブロックに接続されている。

  • ブロックに調整可能な実行時パラメーターがある。

  • ブロックが再利用可能なサブシステム内にあり、そのサブシステムの出力が再利用可能なサブシステムの外にあるブロックに接続されている。

  • ブロックに連続状態がある。

  • ブロックに離散状態があり、状態が記録されているか非自動ストレージ クラスをもつ。

  • ブロックが S-Function であり、ssSetBlockReduction を使用してブロック削減を有効にしていない。

  • ブロックの出力がテスト ポイントとして構成されているかストレージ クラスをもち、そのソースが別の条件付きサブシステム内のブロックである。

参考

関連するトピック