优化动态数组访问
你可以跑得更快的代码中的动态数组使用配置属性CacheDynamicArrayDataPointer
。这个属性举起指针指向一个临时变量的数据。这个临时变量用于访问矩阵数据的动态数组。
默认情况下,启用了财产对墨西哥人来说,静态库,动态链接库和可执行的配置。缓存动态数组数据指针可以降低动态数组的执行时间几乎等于静态数组的执行时间。这个属性也有助于在许多情况下,提高代码的可读性。
禁用缓存动态数组数据指针属性
禁用属性使用MATLAB®编码器™应用:
打开生成对话框。在生成代码页面,点击生成箭头
。
点击更多的设置。
在先进的选项卡,设置缓存动态数组数据来
没有
。
禁用属性在命令行:
在MATLAB的工作区中,定义的配置对象,使用
coder.config
使用参数墨西哥人的
,“自由”
,“dll”
,或exe”
(取决于您的需求)。cfg = coder.config (“自由”);
设置
CacheDynamicArrayDataPointer
配置对象的属性假
:cfg。CacheDynamicArrayDataPointer = false;
比较生成的C代码
比较生成的C代码启用缓存动态数组数据指针,禁用缓存动态数组数据指针。
考虑一个函数matrixAdd
。
函数c = matrixAdd (a, b)% # codegenc = a + b;结束
定义配置对象和生成C代码通过使用codegen
命令。
生成C代码启用了缓存动态数组数据指针:
cfg = coder.config (“自由”);codegen配置cfgmatrixAddarg游戏…{编码器。typeof(0,[1正]),编码器。typeof(0,[1正])}报告
代码生成成功:查看报告
生成C代码缓存的动态数组数据指针禁用:
cfg = coder.config (“自由”);cfg。CacheDynamicArrayDataPointer = false;codegen配置cfgmatrixAddarg游戏…{编码器。typeof(0,[1正]),编码器。typeof(0,[1正])}报告
代码生成成功:查看报告
打开报告,检查生成的代码。
这个表比较生成的C代码。当启用属性时,临时变量等* a_data
,* b_data
,* c_data
都包含在生成的代码。使用临时变量不需要双指针解引用访问矩阵数据。从而提高动态数组的执行时间生成的C代码。
启用缓存动态数组数据指针 | 禁用缓存动态数组数据指针 |
---|---|
空白matrixAdd (const emxArray_real_T *,…const emxArray_real_T * b, emxArray_real_T * c){双* a_data;双* b_data;双* c_data;int我;b_data = b - >数据;a_data = - >数据;如果(- >大小[1]= = b - >大小[1]){int loop_ub;我= c - > [0] * c - >大小[1];c - >大小[0]= 1; c->size[1] = a->size[1]; emxEnsureCapacity_real_T(c, i); c_data = c->data; loop_ub = a->size[1]; for (i = 0; i < loop_ub; i++) { c_data[i] = a_data[i] + b_data[i]; } } else { plus(c, a, b); } } |
空白matrixAdd (const emxArray_real_T *,…const emxArray_real_T * b, emxArray_real_T * c) {int我;如果(- >大小[1]= = b - >大小[1]){int loop_ub;我= c - > [0] * c - >大小[1];c - >大小[0]= 1;c - >大小[1]= >大小[1];emxEnsureCapacity_real_T (c i);loop_ub =[1] - >大小;(我= 0;我< loop_ub; i++) { c->data[i] = a->data[i] + b->data[i]; } } else { plus(c, a, b); } } |
限制
缓存动态数组数据指针不支持:金宝app
c++
编码器:数组
GPU编码器
代码替换库(CRL)与数据校准规范