メインコンテンツ

グローバル ブロック出力の再利用

最適化によるグローバル変数の再利用

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

説明

[グローバル ブロック出力の再利用] パラメーターは、可能な限りブロック出力用のグローバル メモリを再利用するようにコード ジェネレーターに指示します。

依存関係

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

設定

on (既定値) | off
オン

コード ジェネレーターは可能な限り信号メモリを再利用し、グローバル変数の使用を削減します。

オフ

信号は一意の場所に保存されます。

すべて展開する

ROM と RAM の消費量とデータ コピーを削減し、生成コードの実行速度を向上させます。モデル コンフィギュレーション パラメーター [グローバル ブロック出力の再利用] を選択することで、グローバル変数を再利用するようにコード ジェネレーターを設定します。

モデル例

コマンド ウィンドウで、GlobalReuse モデルを開きます。

model='GlobalReuse';
open_system('GlobalReuse')

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

  1. [コンフィギュレーション パラメーター] ダイアログ ボックスで、[信号ストレージの再利用] が選択されていることを確認します。

  2. [コード生成]、[レポート] ペインで、[静的コード メトリクスの生成] がオンになっていることを確認します。

  3. [グローバル ブロック出力の再利用] をオフにして、[適用] をクリックします。あるいは、このパラメーターをプログラムで設定することもできます。

set_param(model,'GlobalBufferReuse', 'off');

Ctrl+B を押してコードを生成します。

slbuild(model);
### Searching for referenced models in model 'GlobalReuse'.
### Total of 1 models to build.
### Starting build procedure for: GlobalReuse
### Successful completion of build procedure for: GlobalReuse

Build Summary

Top model targets:

Model        Build Reason                                         Status                        Build Duration
==============================================================================================================
GlobalReuse  Information cache folder or artifacts were missing.  Code generated and compiled.  0h 0m 7.365s

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 8.5208s

最適化を行わない生成コードを表示します。ここで GlobalReuse.c の一部を示します。

cfile = fullfile('GlobalReuse_ert_rtw','GlobalReuse.c');
coder.example.extractLines(cfile,'/* Model step','/* Model initialize',1, 0);
/* Model step function */
void GlobalReuse_step(void)
{
  /* Sum: '<Root>/Sum' incorporates:
   *  Delay: '<Root>/Delay'
   *  Inport: '<Root>/In1'
   */
  rtDW.Delay_DSTATE += rtU.In1;

  /* Outport: '<Root>/Out1' incorporates:
   *  Delay: '<Root>/Delay'
   */
  rtY.Out1 = rtDW.Delay_DSTATE;
}

生成コードにはグローバル変数 rtDW.Delay_DSTATE のデータ コピーが含まれています。静的コード メトリクス レポートを開きます。グローバル変数に対する読み取りと書き込みの合計回数は 8 回です。合計サイズは 32 バイトです。

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

[コンフィギュレーション パラメーター] ダイアログ ボックスで、[グローバル ブロック出力の再利用] を選択し、[適用] をクリックします。あるいは、このパラメーターをプログラムで設定することもできます。

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

コードを生成します。

slbuild(model);
### Searching for referenced models in model 'GlobalReuse'.
### Total of 1 models to build.
### Starting build procedure for: GlobalReuse
### Successful completion of build procedure for: GlobalReuse

Build Summary

Top model targets:

Model        Build Reason                     Status                        Build Duration
==========================================================================================
GlobalReuse  Generated code was out of date.  Code generated and compiled.  0h 0m 6.3761s

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 6.7702s

最適化を行った生成コードを表示します。ここで GlobalReuse.c の一部を示します。

cfile = fullfile('GlobalReuse_ert_rtw','GlobalReuse.c');
coder.example.extractLines(cfile,'/* Model step','/* Model initialize',1, 0);
/* Model step function */
void GlobalReuse_step(void)
{
  /* Sum: '<Root>/Sum' incorporates:
   *  Delay: '<Root>/Delay'
   *  Inport: '<Root>/In1'
   */
  rtY.Out1 += rtU.In1;
}

コード ジェネレーターはデータ コピーを排除し、ステートメントの数を 2 つから 1 つに、グローバル変数の数を 3 つから 2 つに削減します。

静的コード メトリクス レポートを開きます。グローバル変数については、この最適化によってグローバル変数に対する読み取りおよび書き込みの合計回数が 8 回から 5 回に、合計サイズは 32 バイトから 24 バイトに削減されます。

bdclose(model)

推奨設定

アプリケーション設定
デバッグオフ
トレーサビリティオフ
効率性オン (実行、ROM、RAM)
安全対策影響なし

プログラムでの使用

パラメーター: GlobalBufferReuse
型: character vector
値: 'on' | 'off'
既定の設定: 'on'

バージョン履歴

R2014a で導入