Сконфигурируйте порог размотки цикла

Параметр Loop unrolling threshold на панели Optimization определяет, когда широкий сигнал или параметр должны быть упакованы в for цикл и когда он должен быть сгенерирован как отдельный оператор для каждого элемента сигнала. Значение порога по умолчанию является 5.

Для примера рассмотрим модель ниже:

Параметром усиления блока Gain является вектор myGainVec.

Предположим, что значение порога разворачивания цикла установлено на значение по умолчанию, 5.

Если myGainVec объявляется как

myGainVec = [1:10];

массив из 10 элементов, myGainVec_P.Gain_Gain[], объявляется в пределах Parameters_<reservedrangesplaceholder0 > структура данных. Размер массива усилений превышает порог разворачивания цикла. Поэтому код, сгенерированный для блока Gain, итератируется по массиву в for цикл, как показано на следующем коде:

{
    int32_T i1;

    /* Gain: '<Root>/Gain' */
    for(i1=0; i1<10; i1++) {
      myGainVec_B.Gain_f[i1] = rtb_foo *
        myGainVec_P.Gain_Gain[i1];
    }
  }

Если myGainVec объявляется как

myGainVec = [1:3];

массив из трех элементов, myGainVec_P.Gain_Gain[], объявляется в пределах Parameters структура данных. Размер массива усилений ниже порога разворачивания цикла. Сгенерированный код состоит из встроенных ссылок на каждый элемент массива, как в коде ниже.

/* Gain: '<Root>/Gain' */
  myGainVec_B.Gain_f[0] = rtb_foo * myGainVec_P.Gain_Gain[0];
  myGainVec_B.Gain_f[1] = rtb_foo * myGainVec_P.Gain_Gain[1];
  myGainVec_B.Gain_f[2] = rtb_foo * myGainVec_P.Gain_Gain[2];

Дополнительные сведения о цикле прокатки см. в разделах «Исследование имен переменных» и «Прокатка контура».

Примечание

Когда модель включает Stateflow® графики или MATLAB Function блоки, можно применить набор оптимизаций Stateflow на панели Optimization. Настройки, выбранные для опций Stateflow, также применяются к MATLAB Function блокам в модели. Это связано с тем, что блоки MATLAB Function и диаграммы Stateflow построены на верхнюю часть одной технологии и совместно используют основу кода. Вам не нужна лицензия Stateflow для использования MATLAB Function блоков.

Примечание

Если ваш MATLAB Function блок содержит код с двумя вложенными for-циклы:

  • Если количество итераций внутреннего цикла меньше порога, генератор кода сначала разворачивает внутренний цикл. Впоследствии, если продукт количества итераций двух циклов также меньше порога, генератор кода разворачивает внешний контур. В противном случае генератор кода производит внешнюю for-цикл.

  • Если количество итераций внутреннего цикла равно или больше порога, генератор кода производит обе for- циклы

  • Для N-мерного массива генератор кода разворачивает каждый непрерывный цикл, пока продукт итераций цикла не станет меньше порогового значения.

См. также

Похожие темы