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

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

Например, рассмотрите модель ниже:

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

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

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

myGainVec = [1:10];

массив 10 элементов, myGainVec_P.Gain_Gain[], объявляется в Parameters_model структура данных. Размер массива усиления превышает порог развертывания цикла. Поэтому код, сгенерированный для блока 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-мерного массива генератор кода разворачивает каждый непрерывный цикл, пока продукт итераций цикла не меньше порогового значения.

Смотрите также

Похожие темы