exponenta event banner

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

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

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

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

Пример

В 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)

См. также

Похожие темы