Недавно я профилировал некоторый код MATLAB и был потрясен, увидев следующее в часто используемой функции:
5.76 198694 58 persistent CONSTANTS;
3.44 198694 59 if isempty(CONSTANTS) % initialize CONSTANTS
Другими словами, MATLAB потратил около 9 секунд на 198694 вызовов функций, объявляя постоянный CONSTANTS
и проверяя, был ли он инициализирован. Это составляет 13 % от общего времени, затраченного на эту функцию.
Действительно ли постоянные переменные так сильно снижают производительность в MATLAB? Или мы делаем что-то ужасно неправильно здесь?
ОБНОВЛЕНИЕ
@Andrew Эндрю Я попробовал ваш пример сценария, и я очень, очень озадачен результатом:
time calls line
6 function has_persistent
6.48 200000 7 persistent CONSTANTS
1.91 200000 8 if isempty(CONSTANTS)
9 CONSTANTS = 42;
10 end
Я попробовал команду Bench (), и она показала, что моя машина находится в среднем диапазоне машин-образцов. Запуск 64-битной версии Ubuntu на процессоре Intel(R) Core(TM) i7, 4 ГБ ОЗУ.