exponenta event banner

Минимизация вычислений и хранения промежуточных результатов на блочных выходах

Сворачивание выражения

Сворачивание выражений оптимизирует код для минимизации вычисления промежуточных результатов на блочных выходах и сохранения таких результатов во временных буферах или переменных. Когда сворачивание выражений включено, генератор кода сворачивает (сворачивает) вычисления блоков в одно выражение вместо создания отдельных инструкций кода и объявлений хранения для каждого блока в модели. Большинство блоков Simulink поддерживают сворачивание выражений.

Сворачивание выражения повышает эффективность генерируемого кода, часто достигая результатов, которые выгодно сравниваются с оптимизированным для рук кодом. Во многих случаях целые группы вычислений модели складываются в единую, высоко оптимизированную линию кода.

Можно использовать сворачивание выражений в собственных встроенных S-функциональных блоках. Дополнительные сведения см. в разделе S-Функции, поддерживающие сворачивание выражений.

Пример модели

Создать код

При сворачивании выражения в explfld.c , генератор кода генерирует этот код.

/* Model step function */
void exprfld_step(void)
{
  /* Gain: '<Root>/Gain' incorporates:
   *  Inport: '<Root>/In1'
   */
  exprfld_B.S1 = exprfld_P.Gain_Gain * exprfld_U.i1;
 
  /* Gain: '<Root>/Gain1' incorporates:
   *  Inport: '<Root>/In2'
   */
  exprfld_B.S2 = exprfld_P.Gain1_Gain * exprfld_U.i2;
 
  /* Outport: '<Root>/Out1' incorporates:
   *  Product: '<Root>/Product'
   */
  exprfld_Y.Out1 = exprfld_B.S1 * exprfld_B.S2;
}

Существуют отдельные операторы кода для обоих блоков усиления. Перед окончательным выводом эти операторы кода вычисляют временные результаты для блоков усиления.

Включить оптимизацию

Сворачивание выражения включено по умолчанию. Чтобы проверить, включено ли сворачивание выражения для существующей модели, выполните следующие действия.

  1. Сворачивание выражений доступно, только если выбран параметр «Параметры конфигурации» > «Повторное использование хранилища сигналов», так как сворачивание выражений работает только для выражений, включающих локальные переменные. Включите параметр повторного использования хранилища сигналов.

  2. При выборе параметра Повторное использование хранилища сигналов все параметры Включить выходы локальных блоков, Повторно использовать выходы локальных блоков и Исключить избыточные локальные переменные (сворачивание выражений) включены по умолчанию.

Создание кода с оптимизацией

При сворачивании выражения генератор кода генерирует однострочное вычисление вывода, как показано в expfld.c файл. Созданные комментарии документируют параметры блока, которые отображаются в выражении.

/* Model step function */
void exprfld_step(void)
{
  /* Outport: '<Root>/Out1' incorporates:
   *  Gain: '<Root>/Gain'
   *  Gain: '<Root>/Gain1'
   *  Inport: '<Root>/In1'
   *  Inport: '<Root>/In2'
   *  Product: '<Root>/Product'
   */
  exprfld_Y.Out1 = 
     exprfld_P.Gain_Gain * 
     exprfld_U.i1 * 
     (exprfld_P.Gain1_Gain * exprfld_U.i2);
}

Для примера сворачивания выражения в контексте более сложной модели щелкните rtwdemo_slexprfold или в командной строке введите:

rtwdemo_slexprfold

Дополнительные сведения см. в разделе Включение и повторное использование выходных данных локального блока в сгенерированном коде

См. также

| | |

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