exponenta event banner

Настройка порога разбиения на шлейфы

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

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

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

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

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

myGainVec = [1:10];

массив из 10 элементов, myGainVec_P.Gain_Gain[], объявляется в пределах Parameters_model структура данных. Размер массива усиления превышает пороговое значение разматывания цикла. Поэтому код, генерируемый для блока усиления, итерируется по массиву в 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, можно применить набор оптимизаций Stateflow на панели Оптимизация (Optimization). Настройки, выбранные для опций потока состояний, также применяются к функциональным блокам MATLAB в модели. Это происходит потому, что функциональные блоки MATLAB и диаграммы Stateflow построены поверх одной технологии и имеют общую кодовую базу. Для использования функциональных блоков MATLAB лицензия Stateflow не требуется.

Примечание

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

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

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

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

См. также

Связанные темы