memset
ФункцияВ этом примере показано, как оптимизировать сгенерированный код с помощью memset
функция для очистки внутреннего хранилища. Когда вы выбираете параметр конфигурации модели Использовать memset для инициализации floats и удваивается до 0,0, memset
функция очищает внутреннюю память до целочисленного битового шаблона 0
(то есть все биты отключены).
Если ваш компилятор и целевой CPU оба представляют нуль с плавающей точкой с целочисленным битовым шаблоном 0
, рассмотрите установку этого параметра для выполнения усиления и эффективности ПЗУ.
ПРИМЕЧАНИЕ. Значения командной строки являются противоположными значениям настроек. 'on' в командной строке соответствует очистке настройки. 'off'
в командной строке соответствует выбору настройки.
Эта оптимизация:
Уменьшает потребление ПЗУ.
Улучшает скорость выполнения.
Рассмотрим matlab:rtwdemo_memset модели.
model = 'rtwdemo_memset';
open_system(model);
Генератор кода использует цикл, чтобы инициализировать Constant
блочные значения.
Создайте временную папку (в системной временной папке) для процесса сборки и проверки.
currentDir = pwd; [~,cgDir] = rtwdemodir();
Создайте модель.
slbuild(model)
### Starting build procedure for: rtwdemo_memset ### Successful completion of build procedure for: rtwdemo_memset Build Summary Top model targets built: Model Action Rebuild Reason =============================================================================================== rtwdemo_memset 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 10.531s
Просмотрите сгенерированный код без оптимизации. Эти строки кода находятся в rtwdemo_memset.c
.
cfile = fullfile(cgDir,'rtwdemo_memset_grt_rtw','rtwdemo_memset.c'); rtwdemodbtype(cfile,'/* Model initialize function */',... '/* Model terminate function */',1,0);
/* Model initialize function */ void rtwdemo_memset_initialize(void) { /* Registration code */ /* initialize error status */ rtmSetErrorStatus(rtwdemo_memset_M, (NULL)); /* external outputs */ { int32_T i; for (i = 0; i < 50; i++) { rtwdemo_memset_Y.Out1[i] = 0.0; } } { int32_T i; /* ConstCode for Outport: '<Root>/Out1' */ for (i = 0; i < 50; i++) { rtwdemo_memset_Y.Out1[i] = 56.0; } /* End of ConstCode for Outport: '<Root>/Out1' */ } }
Откройте диалоговое окно Параметры конфигурации.
В диалоговом окне Параметра конфигурации выберите Use memset, чтобы инициализировать floats и удвоится до 0,0 параметра. Также можно использовать API командной строки, чтобы включить оптимизацию:
set_param(model,'InitFltsAndDblsToZero','off'); % # Open the Configuration Parameters dialog box.
Генератор кода использует memset
функция для инициализации Constant
блочные значения.
Создайте модель.
slbuild(model)
### Starting build procedure for: rtwdemo_memset ### Successful completion of build procedure for: rtwdemo_memset Build Summary Top model targets built: Model Action Rebuild Reason ============================================================================== rtwdemo_memset 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 5.655s
Просмотрите сгенерированный код с оптимизацией. Эти строки кода находятся в rtwdemo_memset.c
.
rtwdemodbtype(cfile,'/* Model initialize function */',... '/* Model terminate function */',1,0);
/* Model initialize function */ void rtwdemo_memset_initialize(void) { /* Registration code */ /* initialize error status */ rtmSetErrorStatus(rtwdemo_memset_M, (NULL)); /* external outputs */ (void) memset(&rtwdemo_memset_Y.Out1[0], 0, 50U*sizeof(real_T)); { int32_T i; /* ConstCode for Outport: '<Root>/Out1' */ for (i = 0; i < 50; i++) { rtwdemo_memset_Y.Out1[i] = 56.0; } /* End of ConstCode for Outport: '<Root>/Out1' */ } }
Закройте модель и отчет о генерации кода.
bdclose(model) rtwdemoclean; cd(currentDir)
Используйте memset, чтобы инициализировать плавающие и двойные значения до 0,0