文档

简化数组索引中的乘法操作

当索引数组的元素时,生成的代码可能具有多重操作。您可以选择优化参数简化数组索引(金宝appSimulink Coder)将数组下标中的乘法操作替换为临时变量。这种优化可以通过减少乘法操作的执行次数来提高执行速度。

示例模型

如果你有以下型号:

常量块有以下内容恒定值

  • Const1重塑(1:30,[1 5 3 2])

  • Const2重塑(1:20,[1 5 2 2])

  • Const3重塑(1:90,[1 5 9 2])

连接块参数模式设置为多维数组.的常数样品时间参数设置为1

生成代码

方法构建模型简化数组索引参数关闭生成以下代码:

int32_T我;int32_T i_0;int32_T i_1;For (i = 0;I < 2;i++) {for (i_1 = 0;I_1 < 3;I_1 ++) {for (i_0 = 0;I_0 < 5;i_0++) {ex_arrayindex_Y。Out[(i_0 + 5 * i_1) + 70 * i] = ex_arrayindex_P.Constant1_Value[(5 * i_1 + i_0) + 15 * i]; } } } for (i = 0; i < 2; i++) { for (i_1 = 0; i_1 < 2; i_1++) { for (i_0 = 0; i_0 < 5; i_0++) { ex_arrayindex_Y.Out[(i_0 + 5 * (i_1 + 3)) + 70 * i] = ex_arrayindex_P.Constant2_Value[(5 * i_1 + i_0) + 10 * i]; } } } for (i = 0; i < 2; i++) { for (i_1 = 0; i_1 < 9; i_1++) { for (i_0 = 0; i_0 < 5; i_0++) { ex_arrayindex_Y.Out[(i_0 + 5 * (i_1 + 5)) + 70 * i] = ex_arrayindex_P.Constant3_Value[(5 * i_1 + i_0) + 45 * i]; } } }

使用优化生成代码

打开“配置参数”对话框,并选择简化数组索引参数。再次构建模型。在生成的代码中,[(i_0 + tmp_1) + tmp]替换数组下标中的乘法运算,[(i_0 + 5 * i_1) + 70 * i].生成的代码现在是:

int32_T我;int32_T i_0;int32_T i_1;int32_T tmp;int32_T tmp_0;int32_T tmp_1;TMP = 0;Tmp_0 = 0;For (i = 0;I < 2; i++) { tmp_1 = 0; for (i_1 = 0; i_1 < 3; i_1++) { for (i_0 = 0; i_0 < 5; i_0++) { ex_arrayindex_Y.Out[(i_0 + tmp_1) + tmp] = ex_arrayindex_P.Constant1_Value[(i_0 + tmp_1) + tmp_0]; } tmp_1 += 5; } tmp += 70; tmp_0 += 15; } tmp = 0; tmp_0 = 0; for (i = 0; i < 2; i++) { tmp_1 = 0; for (i_1 = 0; i_1 < 2; i_1++) { for (i_0 = 0; i_0 < 5; i_0++) { ex_arrayindex_Y.Out[((i_0 + tmp_1) + tmp) + 15] = ex_arrayindex_P.Constant2_Value[(i_0 + tmp_1) + tmp_0]; } tmp_1 += 5; } tmp += 70; tmp_0 += 10; } tmp = 0; tmp_0 = 0; for (i = 0; i < 2; i++) { tmp_1 = 0; for (i_1 = 0; i_1 < 9; i_1++) { for (i_0 = 0; i_0 < 5; i_0++) { ex_arrayindex_Y.Out[((i_0 + tmp_1) + tmp) + 25] = ex_arrayindex_P.Constant3_Value[(i_0 + tmp_1) + tmp_0]; } tmp_1 += 5; } tmp += 70; tmp_0 += 45; }

另请参阅

相关的话题