主要内容

行主数组布局的行主算法

这个例子展示了如何使用行主算法来生成高效的代码。您可以启用使用优化的行主阵列布局算法配置参数以启用为行主阵列布局优化的有效行主算法。当使用行主数组布局操作数据时,使用行主算法生成的代码执行速度更快,内存使用效率更高。

在本例中,首先使用默认的列主算法,然后使用行主算法对行主数据进行操作。这种比较有助于确定适当的算法设置,以实现不同的需求。

为行主数组布局使用默认的列主算法生成代码

打开示例模型ex_rowmajor_algorithm

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

该模型包含一个Sum of Elements块,该块的输入是一个数组。默认情况下,Simuli金宝appnk配置了一个带有列主算法和列主数组布局的模型。在本例中,您将该模型的数组布局配置为行主。要指定数组布局,请打开嵌入式编码器,然后打开“配置参数”对话框。在代码生成>接口窗格中,设置配置参数阵列布局选择。或者,在MATLAB命令窗口中,输入:

set_param(模型,“ArrayLayout”“行”);

在MATLAB中更改当前文件夹为可写文件夹。然后通过使用slbuild功能或按Ctrl + B

currentDir = pwd;[~, cgDir] = rtwdemodir ();%生成代码并将代码生成信息捕获到Value值= evalc (“slbuild(“ex_rowmajor_algorithm”)”);

检查生成的ex_rowmajor_algorithm_step阶跃函数ex_rowmajor_algorithm.c

文件= fullfile (“ex_rowmajor_algorithm_ert_rtw”“ex_rowmajor_algorithm.c”);rtwdemodbtype(文件,'/* Model step函数*/'/*初始化函数, 1, 1);
/* Model step函数*/ void ex_rowmajor_algorithm_step(void) {int32_T i;int32_T i_0;/* Sum: '/Sum of Elements Dim1'包含:* Constant: '/Constant1' */ ex_rowmajor_algorithm_Y. */ ex_rowmajor_algorithm_Y. */ ex_rowmajor_algorithm_Y. *Out2 f = -0.0;For (i = 0;我< 2;i++) {for (i_0 = 0;i_0 < 3;i_0++) {int32_T tmp;TMP = (i_0 << 1) + i;ex_rowmajor_algorithm_Y。Out2 = (((ex_rowmajor_algorithm_ConstP.Constant1_Value[tmp] + ex_rowmajor_algorithm_Y.Out2) + ex_rowmajor_algorithm_ConstP.Constant1_Value[tmp + 6]) + ex_rowmajor_algorithm_ConstP.Constant1_Value[tmp + 12]) + ex_rowmajor_algorithm_ConstP.Constant1_Value[tmp + 18]; } } /* End of Sum: '/Sum of Elements Dim1' */ }

阵列布局被设置为使用优化的行主阵列布局算法配置参数设置为,代码生成器使用列主算法。算法按列大顺序遍历数据,但数据按行大顺序遍历。这个过程需要在生成的代码中进行一些额外的操作,这会降低代码的效率,但同时会导致数值结果的更高精度。如果您需要更高精度的数值结果,而不需要考虑效率较低的代码,那么建议您使用列主算法来实现行主数组布局。

使用行主数组布局的行主算法生成代码

要启用行主算法,请在数学和数据类型窗格中,选择配置参数使用优化的行主阵列布局算法复选框。此参数启用为行主阵列布局优化的算法。或者,在MATLAB命令窗口中,输入:

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

启用行主算法后,生成代码。

值= evalc (“slbuild(“ex_rowmajor_algorithm”)”);

检查生成的ex_rowmajor_algorithm_step阶跃函数ex_rowmajor_algorithm.c

文件= fullfile (“ex_rowmajor_algorithm_ert_rtw”“ex_rowmajor_algorithm.c”);rtwdemodbtype(文件,'/* Model step函数*/'/*初始化函数, 1, 1);
/* Model step函数*/ void ex_rowmajor_algorithm_step(void) {int32_T i;/* Sum: '/Sum of Elements Dim1'包含:* Constant: '/Constant1' */ ex_rowmajor_algorithm_Y. */ ex_rowmajor_algorithm_Y. */ ex_rowmajor_algorithm_Y. *Out2 f = -0.0;For (i = 0;我< 24;我+ +){ex_rowmajor_algorithm_Y。Out2 + = ex_rowmajor_algorithm_ConstP.Constant1_Value[我];} /* End of Sum: '/Sum of Elements Dim1' */}

与前面的代码相比,当阵列布局被设置为使用优化的行主阵列布局算法配置参数设置为,代码生成器生成高效的代码。代码生成器使用行主算法以行主顺序遍历数据,这减少了生成代码中的操作数量。但是数值结果的准确性可能没有前面的例子那么高。因此,在列主算法和行主算法的输出中,您可能会遇到微小的数值差异。如果您需要一个高效的代码,而不考虑数字的准确性,那么建议您使用行主数组布局的行主算法。

相关的话题