Сворачивание выражения оптимизирует код, чтобы минимизировать вычисление промежуточных результатов в блоке выходные параметры и устройство хранения данных таких результатов во временных буферах или переменных. Когда сворачивание выражения включено, коллапсы генератора кода (сгибы) блокируют вычисления в отдельное выражение, вместо того, чтобы генерировать отдельные операторы кода и объявления устройства хранения данных для каждого блока в модели. Большинство блоков Simulink поддерживает сворачивание выражения.
Сворачивание выражения повышает эффективность сгенерированного кода, часто достигая результатов, которые выдерживают сравнение с ручным оптимизированным кодом. Во многих случаях целые группы образцовых вычислений сворачиваются в одну, высоко оптимизированную строку кода.
Можно использовать выражение, сворачивающееся в собственных встроенных Блоках s-function. Для получения дополнительной информации смотрите 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; }
Существуют отдельные операторы кода для обоих блоков Усиления. Перед окончательным результатом эти операторы кода вычисляют временные результаты для блоков Усиления.
Сворачивание выражения включено по умолчанию. Чтобы видеть, ли включено сворачивание выражения для существующей модели:
Сворачивание выражения доступно только, когда Configuration Parameters> параметр Signal storage reuse выбран, потому что сворачивание выражения работает только с выражениями, включающими локальные переменные. Включите параметр Signal storage reuse.
Когда вы выбираете 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
Для получения дополнительной информации смотрите, Включают и Повторное использование Локальный Блок Выходные параметры в Сгенерированном коде
Устраните лишние локальные переменные (Сворачивание выражения) | Включите локальному блоку выходные параметры | Повторное использование локальный блок выходные параметры | Повторное использование памяти