600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > matlab 全局符号变量 优化全局变量使用 - MATLAB Simulink Example - MathWorks 中国

matlab 全局符号变量 优化全局变量使用 - MATLAB Simulink Example - MathWorks 中国

时间:2023-07-12 13:16:43

相关推荐

matlab 全局符号变量 优化全局变量使用
- MATLAB  Simulink Example
- MathWorks 中国

示例模型

在模型 matlab:rtwdemo_optimize_global_ebf 中,Assignment 模块将来自 Inport 模块和 Constant 模块的值赋给输出信号。输出信号馈入 Gain 模块中。

model = 'rtwdemo_optimize_global_ebf';

load_system('rtwdemo_optimize_global_ebf')

生成代码但不进行优化

在 Configuration Parameters 对话框中,验证是否选择了 Signal storage reuse 参数。

在 Configuration Parameters 对话框中,对于 Optimize global access parameter,选择 None 或在 MATLAB 命令行窗口中输入以下命令:

set_param('rtwdemo_optimize_global_ebf','GlobalVariableUsage','None');

在您的系统临时文件夹中,为编译和检查过程创建一个文件夹:

currentDir = pwd;

[~,cgDir] = rtwdemodir();

编译模型。

rtwbuild(model);

### Starting build procedure for: rtwdemo_optimize_global_ebf

### Successful completion of build procedure for: rtwdemo_optimize_global_ebf

Build Summary

Top model targets built:

Model Action Rebuild Reason

============================================================================================================

rtwdemo_optimize_global_ebf 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 43.311s

查看生成的代码而不进行优化。这是 rtwdemo_optimize_global_ebf.c 的一部分。

cfile = fullfile(cgDir,'rtwdemo_optimize_global_ebf_ert_rtw',...

'rtwdemo_optimize_global_ebf.c');

rtwdemodbtype(cfile,'/* Model step','/* Model initialize',1, 0);

/* Model step function */

void rtwdemo_optimize_global_ebf_step(void)

{

real_T rtb_Assignment[5];

int32_T i;

/* SignalConversion generated from: '/Assignment' incorporates:

* Constant: '/Constant'

*/

for (i = 0; i < 5; i++) {

rtb_Assignment[i] = rtCP_Constant_Value[i];

}

/* End of SignalConversion generated from: '/Assignment' */

/* Assignment: '/Assignment' incorporates:

* Inport: '/In1'

*/

rtb_Assignment[1] = rtU.In1;

/* Outport: '/Out1' incorporates:

* Gain: '/Gain'

*/

for (i = 0; i < 5; i++) {

rtY.Out1[i] = 2.0 * rtb_Assignment[i];

}

/* End of Outport: '/Out1' */

}

该代码为本地向量 rtb_Assignment 赋值。最后一条语句将局部向量 rtb_Assignment 中的值复制到全局向量 rtY.Out1。更少的全局变量引用会提高执行速度。该代码对全局变量引用使用的指令多于对局部变量引用使用的指令。

在 Static Code Metrics Report 中,检查 Global Variables 部分。

在 Code Generation Report 窗口中,选择 Static Code Metrics Report。

向下滚动到 Global Variables 部分。

选择每个变量前的 [+] 符号以展开它。

对全局变量的读写总次数为 2。

生成代码并进行优化

在 Configuration Parameters 对话框中,对于 Optimize global access parameter,选择 Use global to hold temporary results,或在 MATLAB 命令行窗口中输入以下命令:

set_param('rtwdemo_optimize_global_ebf',...

'GlobalVariableUsage','Use global to hold temporary results');

编译模型。

rtwbuild(model);

### Starting build procedure for: rtwdemo_optimize_global_ebf

### Successful completion of build procedure for: rtwdemo_optimize_global_ebf

Build Summary

Top model targets built:

Model Action Rebuild Reason

===========================================================================================

rtwdemo_optimize_global_ebf 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 18.399s

查看优化后的生成代码。这是 rtwdemo_optimize_global_ebf.c 的一部分。

cfile = fullfile(cgDir,'rtwdemo_optimize_global_ebf_ert_rtw',...

'rtwdemo_optimize_global_ebf.c');

rtwdemodbtype(cfile,'/* Model step','/* Model initialize',1, 0);

/* Model step function */

void rtwdemo_optimize_global_ebf_step(void)

{

int32_T i;

/* SignalConversion generated from: '/Assignment' incorporates:

* Constant: '/Constant'

*/

for (i = 0; i < 5; i++) {

rtY.Out1[i] = rtCP_Constant_Value[i];

}

/* End of SignalConversion generated from: '/Assignment' */

/* Assignment: '/Assignment' incorporates:

* Inport: '/In1'

*/

rtY.Out1[1] = rtU.In1;

/* Outport: '/Out1' incorporates:

* Gain: '/Gain'

*/

for (i = 0; i < 5; i++) {

rtY.Out1[i] *= 2.0;

}

/* End of Outport: '/Out1' */

}

该代码在不使用局部变量的情况下为全局向量 rtY.Out1 赋值。这种赋值可改善 ROM 和 RAM 消耗量,减少数据副本数。代码将值置于每个赋值操作的目标变量中,而不是在最后复制值。在 Static Code Metrics Report 中,检查 Global Variables 部分。

由于使用全局变量保存局部结果,全局变量的读写总次数从 2 增加到 5。这种优化通过重用全局变量来减少数据副本数。

关闭代码生成报告。

rtwdemoclean;

cd(currentDir)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。