Сгенерированный код может иметь, умножают операции при индексации элемента массива. Можно выбрать параметр оптимизации, Упрощают индексацию массива (Simulink Coder), чтобы заменить, умножают операции в индексе массива с временной переменной. Эта оптимизация может улучшить скорость выполнения путем сокращения числа раз, которое выполняет умножить операция.
Если у вас есть следующая модель:
Постоянные блоки имеют следующий Constant value:
Const1
: reshape(1:30,[1 5 3 2])
Const2
: reshape(1:20,[1 5 2 2])
Const3
: reshape(1:90,[1 5 9 2])
Конкатенация параметров блоков Mode установлена в Multidimensional array
. Постоянные блоки параметр Sample time установлены в –1
.
Создавание модели с выключенным параметром Simplify array indexing генерирует следующий код:
int32_T i; 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]; } } }
Откройте диалоговое окно Configuration Parameters и выберите параметр Simplify array indexing. Создайте модель снова. В сгенерированном коде [(i_0 + tmp_1) + tmp]
заменяет умножить операцию в индексе массива, [(i_0 + 5 * i_1) + 70 * i]
. Сгенерированный код теперь:
int32_T i; 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; }