主要内容

数据复制减少数据存储读取和数据存储块写

这个例子显示了代码生成器删除临时缓冲区数据存储读取和数据存储块写。这种优化提高执行速度,减少内存消耗。

示例模型

该模型rtwdemo_optimizedatastorebuffers包含函数调用者UpdateFunc调用模型函数金宝appDefineUpdateFunc。读取的数据存储块安全域读取从mem。数据存储块写DSW写入mem

模型=“rtwdemo_optimizedatastorebuffers”;open_system(模型);

没有生成代码优化

在配置参数对话框中,取消选择重用缓冲区的数据存储读取和数据存储块写参数或在MATLAB®命令提示符,输入这个命令:

set_param(模型,“OptimizeDataStoreBuffers”,“关闭”);

构建的模型。

currentDir = pwd;[~,cgDir] = rtwdemodir ();slbuild(模型)
# # #开始构建过程:rtwdemo_optimizedatastorebuffers # # #成功完成构建过程:rtwdemo_optimizedatastorebuffers模型建立目标:总结构建模型重建行动的原因= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = rtwdemo_optimizedatastorebuffers代码生成和编译。代码生成信息文件不存在。1 1模型的建立(0模型已经更新)构建持续时间:0 h 0米20.865秒

查看生成的代码没有优化。这段代码是在rtwdemo_optimizedatastorebuffers.c

用= fullfile (cgDir,“rtwdemo_optimizedatastorebuffers_ert_rtw”,“rtwdemo_optimizedatastorebuffers.c”);rtwdemodbtype(用“/ *模型步骤”,/ *初始化模型的1 0);
/ *模型阶跃函数* /无效步骤(void) {real_T rtb_DSR_last;real_T rtb_SimFuncCall_o1;real_T rtb_Sum_p;/ * DataStoreRead: < Root > /安全域的* / rtb_DSR_last = mem.last;/ *开关:“< Root > /开关”包含:*不变:“< Root > /常数”* DataStoreRead: < Root > /安全域的*尺寸:< Root > /明确的* /如果(rtU.Clear) {rtb_SimFuncCall_o1 = 0.0;其他}{rtb_SimFuncCall_o1 = mem.max;}/ *开关:“< Root > /开关”* / / *功能性:“< Root > / SimFuncCall”包含:*尺寸:“< Root > / DataNew”* / UpdateFunc (rtb_SimFuncCall_o1 rtU。DataNew、&rtb_SimFuncCall_o1 &rtb_Sum_p);/ * DataStoreWrite:“< Root > / DSW“下手* / mem。去年= rtb_SimFuncCall_o1;mem。max = rtb_Sum_p; /* Outport: '/Delta' incorporates: * DataStoreRead: '/DSR' * Inport: '/DataNew' * Sum: '/Sum' */ rtY.Delta = rtU.DataNew - rtb_DSR_last; }

生成的代码包含数据存储的数据副本读取和写数据存储块,分别。

生成代码的优化

在配置参数对话框中清除重用缓冲区的数据存储读取和数据存储块写参数或MATLAB命令提示符,输入这个命令:

set_param(模型,“OptimizeDataStoreBuffers”,“上”);

构建的模型。

slbuild(模型)
# # #开始构建过程:rtwdemo_optimizedatastorebuffers # # #成功完成构建过程:rtwdemo_optimizedatastorebuffers模型建立目标:总结构建模型重建行动的原因= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = rtwdemo_optimizedatastorebuffers代码生成和编译。生成的代码是过时了。1 1模型的建立(0模型已经更新)构建持续时间:0 h 0米16.773秒

查看生成的代码的优化。这段代码是在rtwdemo_optimizedatastorebuffers.c

用= fullfile (cgDir,“rtwdemo_optimizedatastorebuffers_ert_rtw”,“rtwdemo_optimizedatastorebuffers.c”);rtwdemodbtype(用“/ *模型步骤”,/ *初始化模型的1 0);
/ *模型阶跃函数* /无效步骤(void) {real_T rtb_DSR_last;real_T tmp;/ * DataStoreRead: < Root > /安全域的* / rtb_DSR_last = mem.last;/ *开关:“< Root > /开关”包含:*不变:“< Root > /常数”* DataStoreRead: < Root > /安全域的*尺寸:< Root > /明确的* /如果(rtU.Clear) {tmp = 0.0;其他}{tmp = mem.max;}/ *功能性:“< Root > / SimFuncCall”包含:* DataStoreWrite:“< Root > / DSW“下手*尺寸:“< Root > / DataNew”*开关:“< Root > /开关”* / UpdateFunc (tmp, rtU。DataNew mem。最后,&mem.max);/ *输出港:“< Root > /δ”包含:* DataStoreRead: < Root > /安全域的*尺寸:“< Root > / DataNew”*金额:< Root > /笔的* /而无。δ= rtU。DataNew - rtb_DSR_last;}

数据存储的数据复制写不是在生成的代码块。包含数据存储的数据复制的代码读取块因为和块后执行数据存储块写。生成的代码包含了变量rtb_DSR_last和块的输出。因此,块得到的值之和SimFuncCall计算的时间步长,而不是这些值下一个时间步。如果和块的优先级低于SimFuncCall,代码生成器可以删除数据存储的数据复制读取块。其他情况下,代码生成器可能不能消除数据副本:

  • 模型金宝app函数内部写入数据存储内存块。

  • 数据存储读或写数据存储块选择元素的数组数据存储内存块。

  • 数据存储内存块有一个自定义存储类。

  • 数据存储读取和数据存储块写发生在同一个街区除非块是一个总线分配块或一个任务块。

关闭模型和清理。

bdclose rtwdemoclean(模型);cd (currentDir)

另请参阅

相关的话题