memcpy
优化矢量赋值生成代码的函数你可以使用使用memcpy进行向量赋值参数,通过替换来优化生成的向量赋值代码为
循环与memcpy
函数调用。的memcpy
功能比功能更有效率为
-loop控制的元素赋值为大数据集。这种优化提高了执行速度。
选择使用memcpy进行向量赋值参数启用关联参数Memcpy阈值(字节),它允许您指定以字节为单位的最小数组大小memcpy
函数调用应该替换为
生成的代码中的循环。有关更多信息,请参见使用memcpy进行向量赋值(金宝app仿真软件编码器)和Memcpy阈值(字节)(金宝app仿真软件编码器)。在考虑是否使用此优化时,
验证您的目标是否支持金宝appmemcpy
函数。
确定您的模型是否使用信号向量分配(例如Y =表达式
)来移动大量数据,例如,使用Selector块。
要应用这种优化,
首先考虑在没有进行优化的情况下生成代码,并测量其执行速度,以建立评估优化分配的基线。
选择使用memcpy进行向量赋值并检查设置Memcpy阈值(字节),默认情况下指定最小数组大小为64字节memcpy
函数调用替换为
循环。根据应用程序的信号向量赋值中使用的数组大小,以及可能影响阈值选择的目标环境考虑因素,接受默认值或指定另一个数组大小。
生成代码,并根据您的基线或以前的迭代来度量它的执行速度。重复步骤2和步骤3,直到获得最佳结果。
的memcpy
在某些条件下可能不会发生优化,包括其他优化的优先级高于memcpy
优化,或者生成的代码来自目标语言编译器(TLC)代码,例如与s -函数块关联的TLC文件。
如果您是嵌入式编码器许可®,您可以使用代码替换库(CRL)来提供您自己的自定义实现memcpy
函数在生成的模型代码中使用。有关更多信息,请参见内存功能码替换.
检查使用的结果使用memcpy进行向量赋值参数上生成的向量分配代码,创建一个生成信号向量分配的模型。例如,
使用在,出,选择器块创建以下模型。
打开模型资源管理器并配置信号的属性为三机一体
和In2
源块。对于每一个,港维来[1100]
,并设置数据类型来int32
.应用更改并保存模型。在本例中,模型有名称vectorassign
.
对于每个Selector块,设置指数参数1:50
.设置输入口大小参数One hundred.
.
的使用memcpy进行向量赋值参数默认为开启。若要关闭该参数,请进入优化窗格和清除使用memcpy进行向量赋值参数。
去代码生成>报告窗格,并选择创建代码生成报告.然后去代码生成窗格中,选择只生成代码选项,并为模型生成代码。当代码生成完成时,将显示HTML代码生成报告。
在HTML代码生成报告中,单击vectorassign.c
对模型的阶跃函数进行分段检查。注意,向量赋值是使用为
循环。
/*模型步进函数*/ void vectorassign_step(void) {int32_T i;For (i = 0;我< 50;i++) {/* Outport: '/Out1'合并:* import: ' /In1' */ vectorassign_Y. txt . txt . txt . txt . txt . txt . txt . txt . txt . txt . txt . txt . txt . txt . txt . txt . txt . txt . txt。着干活[我]= vectorassign_U.In1[我];/* Outport: ' /Out2'合并:* import: ' /In2' */ vectorassign_Y。Out2[我]= vectorassign_U.In2[我];}}
去优化窗格,并选择使用memcpy进行向量赋值选择。离开Memcpy阈值(字节)选项的默认设置为64
.应用更改并为模型重新生成代码。当代码生成完成时,再次显示HTML代码生成报告。
在HTML代码生成报告中,单击vectorassign.c
节并检查模型输出函数。注意,vector赋值现在是使用memcpy
函数调用。
/* Model step function */ void vectorassign_step(void) {/* Outport: '/Out1'合并:* import: ' /In1' */ memcpy(&vectorassign_Y. class . class);着干活[0],&vectorassign_U。三机一体[0], 50U * sizeof(real_T)); /* Outport: ' /Out2' incorporates: * Inport: ' /In2' */ memcpy(&vectorassign_Y.Out2[0], &vectorassign_U.In2[0], 50U * sizeof(real_T)); }