Удалите код для блоков, которые не влияют на вычислительные результаты

Этот пример показывает, как генератор кода оптимизирует сгенерированный код путем удаления кода, который не влияет на вычислительные результаты. Эта оптимизация:

  • Увеличивает скорость выполнения.

  • Уменьшает потребление ПЗУ.

Пример

В rtwdemo_blockreduction модели блок значения Gain 1.0 находится между блоками Inport и Outport.

model = 'rtwdemo_blockreduction';
open_system(model);

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

Создайте временную папку для процесса сборки и проверки.

currentDir=pwd;
[~,cgDir]=rtwdemodir();

Создайте модель.

set_param(model,'BlockReduction','off');
slbuild(model)
### Starting build procedure for: rtwdemo_blockreduction
### Successful completion of build procedure for: rtwdemo_blockreduction

Build Summary

Top model targets built:

Model                   Action                       Rebuild Reason                                    
=======================================================================================================
rtwdemo_blockreduction  Code generated and compiled  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 6.7807s

Вот код из rtwdemo_blockreduction.c.

cfile = fullfile(cgDir,'rtwdemo_blockreduction_ert_rtw','rtwdemo_blockreduction.c');
rtwdemodbtype(cfile, '/* Model step function */',...
    '/* Model initialize function */', 1, 0);
/* Model step function */
void rtwdemo_blockreduction_step(void)
{
  /* Outport: '<Root>/Out1' incorporates:
   *  Gain: '<Root>/Gain'
   *  Inport: '<Root>/In1'
   */
  rtwdemo_blockreduction_Y.Out1 = 1.0 * rtwdemo_blockreduction_U.In1;
}

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

  1. Откройте диалоговое окно Параметры конфигурации.

  2. Выберите Блочное сокращение. Эта оптимизация включена по умолчанию.

Также используйте API командной строки, чтобы включить оптимизацию.

set_param(model,'BlockReduction','on');

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

slbuild(model)
### Starting build procedure for: rtwdemo_blockreduction
### Successful completion of build procedure for: rtwdemo_blockreduction

Build Summary

Top model targets built:

Model                   Action                       Rebuild Reason                   
======================================================================================
rtwdemo_blockreduction  Code generated and compiled  Generated code was out of date.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 6.2203s

Вот оптимизированный код из rtwdemo_blockreduction.c.

cfile = fullfile(cgDir,'rtwdemo_blockreduction_ert_rtw','rtwdemo_blockreduction.c');
rtwdemodbtype(cfile, '/* Model step function */',...
    '/* Model initialize function */', 1, 0);
/* Model step function */
void rtwdemo_blockreduction_step(void)
{
  /* Outport: '<Root>/Out1' incorporates:
   *  Inport: '<Root>/In1'
   */
  rtwdemo_blockreduction_Y.Out1 = rtwdemo_blockreduction_U.In1;
}

Потому что умножение входного сигнала на значение 1.0 не влияет на вычислительные результаты, генератор кода исключает блок Gain из сгенерированного кода. Закройте модель и очистите.

bdclose(model)
rtwdemoclean;
cd(currentDir)

См. также

Похожие темы