简化数组索引中的乘法运算
生成的代码在索引数组元素时可能会有多次操作。您可以选择优化参数简化数组索引,用临时变量替换数组索引中的乘法运算。这种优化可以通过减少乘法运算的执行次数来提高执行速度。
示例模型
假如您有以下模型:

Constant 模块具有以下常量值:
Const1:reshape(1:120,[1 2 3 4 5])Const2:reshape(1:120,[1 2 3 4 5])Const3:reshape(1:120,[1 2 3 4 5])
Concatenate 模块参数模式设置为多维数组。Constant 模块采样时间参数设置为 –1。
生成代码
在关闭简化数组索引参数的情况下构建模型会生成以下代码:
real_T pooled1;
int32_T Out1_tmp;
int32_T Out1_tmp_0;
int32_T i;
int32_T i_0;
int32_T i_1;
int32_T pooled1_tmp;
int32_T pooled1_tmp_0;
for (i_1 = 0; i_1 < 5; i_1++) {
for (i_0 = 0; i_0 < 4; i_0++) {
for (i = 0; i < 3; i++) {
pooled1_tmp = i << 1;
pooled1_tmp_0 = (6 * i_0 + pooled1_tmp) + 24 * i_1;
pooled1 = ex_arrayindex_ConstP.pooled1[pooled1_tmp_0];
pooled1_tmp = (18 * i_0 + pooled1_tmp) + 72 * i_1;
ex_arrayindex_Y.Out1[pooled1_tmp] = pooled1;
Out1_tmp = (((i + 3) << 1) + 18 * i_0) + 72 * i_1;
ex_arrayindex_Y.Out1[Out1_tmp] = pooled1;
Out1_tmp_0 = (((i + 6) << 1) + 18 * i_0) + 72 * i_1;
ex_arrayindex_Y.Out1[Out1_tmp_0] = pooled1;
pooled1 = ex_arrayindex_ConstP.pooled1[pooled1_tmp_0 + 1];
ex_arrayindex_Y.Out1[pooled1_tmp + 1] = pooled1;
ex_arrayindex_Y.Out1[Out1_tmp + 1] = pooled1;
ex_arrayindex_Y.Out1[Out1_tmp_0 + 1] = pooled1;
}
}
}生成优化代码
打开配置参数对话框并选择简化数组索引参数。再次编译模型。在生成的代码中,(tmp_3 + tmp_2) + tmp_0 替换了数组索引中的乘法运算。现在生成的代码是:
real_T pooled1;
int32_T Out1_tmp;
int32_T i;
int32_T i_0;
int32_T i_1;
int32_T pooled1_tmp;
int32_T tmp;
int32_T tmp_0;
int32_T tmp_1;
int32_T tmp_2;
int32_T tmp_3;
tmp = 0;
tmp_0 = 0;
for (i_1 = 0; i_1 < 5; i_1++) {
tmp_1 = 0;
tmp_2 = 0;
for (i_0 = 0; i_0 < 4; i_0++) {
tmp_3 = 0;
for (i = 0; i < 3; i++) {
pooled1_tmp = (tmp_3 + tmp_1) + tmp;
pooled1 = ex_arrayindex_ConstP.pooled1[pooled1_tmp];
Out1_tmp = (tmp_3 + tmp_2) + tmp_0;
ex_arrayindex_Y.Out1[Out1_tmp] = pooled1;
ex_arrayindex_Y.Out1[Out1_tmp + 6] = pooled1;
ex_arrayindex_Y.Out1[Out1_tmp + 12] = pooled1;
pooled1 = ex_arrayindex_ConstP.pooled1[pooled1_tmp + 1];
ex_arrayindex_Y.Out1[Out1_tmp + 1] = pooled1;
ex_arrayindex_Y.Out1[Out1_tmp + 7] = pooled1;
ex_arrayindex_Y.Out1[Out1_tmp + 13] = pooled1;
tmp_3 += 2;
}
tmp_1 += 6;
tmp_2 += 18;
}
tmp += 24;
tmp_0 += 72;
}