许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Matlab全局符号变量设置:优化全局变量使用方法

Matlab全局符号变量设置:优化全局变量使用方法

阅读数 3
点赞 0
article_banner

示例模型

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

8c7e536036e10041ce828b4afeb20467.png

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 部分。

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

b79e3a4540403c9ad08360d9d3cfdec2.png

对全局变量的读写总次数为 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 部分。

53e658e241ebe69dce81718ab9c0b716.png

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

关闭代码生成报告。

rtwdemoclean;

cd(currentDir)


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空