Data Store Read ブロックと Data Store Write ブロックのバッファーの再利用
Data Store Read ブロックと Data Store Write ブロックの一時的なバッファーを除去する
モデル コンフィギュレーション ペイン: [コード生成] / [最適化]
説明
[Data Store Read ブロックと Data Store Write ブロックのバッファーの再利用] パラメーターは、コード ジェネレーターに、Data Store Read ブロックと Data Store Write ブロックの一時的なバッファーを削除するように指示します。可能な場合は、Data Store Memory ブロックを直接使用します。
依存関係
このパラメーターは [信号ストレージの再利用] パラメーターを選択すると有効になります。
設定
on (既定値) | off- オン
可能な場合、Embedded Coder® は Data Store Memory ブロックから直接読み取り、Data Store Memory ブロックに直接書き込みます。Data Store Memory ブロックを直接使用することで、生成されたコードにおいてデータのコピーが除去されて、RAM の消費が抑えられ、コード実行速度が向上します。
- オフ
Embedded Coder は Data Store Read ブロックと Data Store Write ブロックの生成コードにバッファーを挿入します。
例
この例では、コード ジェネレーターで Data Store Read ブロックおよび Data Store Write ブロックの一時的なバッファーを削除する方法を示します。この最適化により、実行速度が向上し、RAM の消費量が減ります。
モデル例
モデル rtwdemo_optimizedatastorebuffers には、Simulink 関数 DefineUpdateFunc を呼び出す関数呼び出し元 UpdateFunc が含まれています。Data Store Read ブロック DSR は mem から読み取ります。Data Store Write ブロック DSW は mem に書き込みます。
model='rtwdemo_optimizedatastorebuffers';
open_system(model);

最適化を使用しないコードの生成
[コンフィギュレーション パラメーター] ダイアログ ボックスで "[Data Store Read ブロックと Data Store Write ブロックのバッファーの再利用] パラメーター" の選択を解除するか、MATLAB® コマンド プロンプトで次のコマンドを入力します。
set_param(model,'OptimizeDataStoreBuffers','off');
モデルをビルドします。
slbuild(model)
### Searching for referenced models in model 'rtwdemo_optimizedatastorebuffers'. ### Total of 1 models to build. ### Starting build procedure for: rtwdemo_optimizedatastorebuffers ### Successful completion of build procedure for: rtwdemo_optimizedatastorebuffers Build Summary Top model targets: Model Build Reason Status Build Duration =================================================================================================================================== rtwdemo_optimizedatastorebuffers Information cache folder or artifacts were missing. Code generated and compiled. 0h 0m 20.563s 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 22.695s
最適化を行わない生成コードを表示します。このコードは rtwdemo_optimizedatastorebuffers.c に含まれています。
cfile = fullfile('rtwdemo_optimizedatastorebuffers_ert_rtw',... 'rtwdemo_optimizedatastorebuffers.c'); coder.example.extractLines(cfile,'/* Model step', '/* Model initialize', 1, 0);
/* Model step function */
void step(void)
{
real_T rtb_DSR_last;
real_T rtb_SimFuncCall_o1;
real_T rtb_Sum_p;
/* DataStoreRead: '<Root>/DSR' */
rtb_DSR_last = mem.last;
/* Switch: '<Root>/Switch' incorporates:
* Constant: '<Root>/Constant'
* DataStoreRead: '<Root>/DSR'
* Inport: '<Root>/Clear'
*/
if (rtU.Clear) {
rtb_SimFuncCall_o1 = 0.0;
} else {
rtb_SimFuncCall_o1 = mem.max;
}
/* End of Switch: '<Root>/Switch' */
/* FunctionCaller: '<Root>/SimFuncCall' incorporates:
* Inport: '<Root>/DataNew'
*/
UpdateFunc(rtb_SimFuncCall_o1, rtU.DataNew, &rtb_SimFuncCall_o1, &rtb_Sum_p);
/* DataStoreWrite: '<Root>/DSW' */
mem.last = rtb_SimFuncCall_o1;
mem.max = rtb_Sum_p;
/* Outport: '<Root>/Delta' incorporates:
* DataStoreRead: '<Root>/DSR'
* Inport: '<Root>/DataNew'
* Sum: '<Root>/Sum'
*/
rtY.Delta = rtU.DataNew - rtb_DSR_last;
}
生成されたコードには、Data Store Read ブロックおよび Data Store Write ブロックのデータ コピーがそれぞれ含まれています。
最適化を使用したコードの生成
[コンフィギュレーション パラメーター] ダイアログ ボックスで [Data Store Read ブロックと Data Store Write ブロックのバッファーの再利用] パラメーターをクリアするか、MATLAB コマンド プロンプトで次のコマンドを入力します。
set_param(model,'OptimizeDataStoreBuffers','on');
モデルをビルドします。
slbuild(model)
### Searching for referenced models in model 'rtwdemo_optimizedatastorebuffers'. ### Total of 1 models to build. ### Starting build procedure for: rtwdemo_optimizedatastorebuffers ### Successful completion of build procedure for: rtwdemo_optimizedatastorebuffers Build Summary Top model targets: Model Build Reason Status Build Duration =============================================================================================================== rtwdemo_optimizedatastorebuffers Generated code was out of date. Code generated and compiled. 0h 0m 8.1245s 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 8.7772s
最適化を行った生成コードを表示します。このコードは rtwdemo_optimizedatastorebuffers.c に含まれています。
cfile = fullfile('rtwdemo_optimizedatastorebuffers_ert_rtw',... 'rtwdemo_optimizedatastorebuffers.c'); coder.example.extractLines(cfile,'/* Model step', '/* Model initialize', 1, 0);
/* Model step function */
void step(void)
{
real_T rtb_DSR_last;
real_T tmp;
/* DataStoreRead: '<Root>/DSR' */
rtb_DSR_last = mem.last;
/* Switch: '<Root>/Switch' incorporates:
* Constant: '<Root>/Constant'
* DataStoreRead: '<Root>/DSR'
* Inport: '<Root>/Clear'
*/
if (rtU.Clear) {
tmp = 0.0;
} else {
tmp = mem.max;
}
/* FunctionCaller: '<Root>/SimFuncCall' incorporates:
* DataStoreWrite: '<Root>/DSW'
* Inport: '<Root>/DataNew'
* Switch: '<Root>/Switch'
*/
UpdateFunc(tmp, rtU.DataNew, &mem.last, &mem.max);
/* Outport: '<Root>/Delta' incorporates:
* DataStoreRead: '<Root>/DSR'
* Inport: '<Root>/DataNew'
* Sum: '<Root>/Sum'
*/
rtY.Delta = rtU.DataNew - rtb_DSR_last;
}
Data Store Write ブロックのデータ コピーは生成されたコードに含まれていません。Sum ブロックが Data Store Write ブロックの後に実行されるため、コードには Data Store Read ブロックのデータ コピーが含まれています。生成されたコードには、Sum ブロックの出力を保持する変数 rtb_DSR_last が含まれています。したがって、Sum ブロックは、次のタイム ステップにおける値ではなく、SimFuncCall が当該タイム ステップの開始時に計算した値を取得します。Sum ブロックの優先順位が SimFuncCall より低い場合、コード ジェネレーターは Data Store Read ブロックのデータ コピーを削除することがあります。コード ジェネレーターがデータ コピーを削除しない可能性があるその他のケースは次のとおりです。
Simulink 関数が内部で Data Store Memory ブロックに書き込みを行う場合。
Data Store Read ブロックまたは Data Store Write ブロックが、Data Store Memory ブロックから配列の要素を選択する場合。
Data Store Memory ブロックがカスタム ストレージ クラスをもつ場合。
Data Store Read ブロックと Data Store Write ブロックが同一ブロックにある場合 (ただし、そのブロックが Bus Assignment ブロックまたは Assignment ブロックである場合を除く)。
モデルを閉じ、クリーンアップします。
bdclose(model)
推奨設定
| アプリケーション | 設定 |
|---|---|
| デバッグ | 影響なし |
| トレーサビリティ | オフ |
| 効率性 | オン |
| 安全対策 | 推奨なし |
プログラムでの使用
パラメーター: OptimizeDataStoreBuffers |
| 型: 文字ベクトル |
値: 'on' | 'off' |
既定の設定: 'on' |
バージョン履歴
R2017a で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)