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

Складывание выражений

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

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

Можно использовать складывание выражений в собственных встроенных блоках s-function. Для получения дополнительной информации см. S-Functions That Support Expression Folding.

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

Сгенерируйте код

С выключенным выражением, в 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;
}

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

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

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

  1. Складывание выражения доступно только, когда выбран параметр Configuration Parameters > Signal storage reuse, потому что складывание выражения работает только с выражениями с локальными переменными. Включите параметр Signal storage reuse.

  2. Когда Вы выбираете Signal storage reuse, Enable local block outputs, Reuse local block outputs, и Eliminate superfluous local variables (expression folding) параметры - все на по умолчанию.

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

При сворачивании выражения генератор кода генерирует однострочные выходные расчеты, как показано на 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

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

См. также

| | |

Похожие темы