Недавно я профилированного некоторые MATLAB код, и я был потрясен, чтобы увидеть следующее в значительной степени используется функция:Производительность штраф постоянных переменных в MATLAB
5.76 198694 58 persistent CONSTANTS;
3.44 198694 59 if isempty(CONSTANTS) % initialize CONSTANTS
Другими словами, MATLAB провел около 9 секунд, более 198694 функции вызовы, объявляя постоянный CONSTANTS
и проверяя, была ли она инициализирована. То есть 13% всего времени, затраченного на эту функцию.
Неужели постоянные переменные действительно несут такую значительную часть штрафа за производительность в MATLAB? Или мы делаем здесь что-то ужасно?
UPDATE
Я попробовал @ Андрей свой образец сценария, и я очень, очень озадачен выход:
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
Я попробовал команду скамейка(), и он показал свою машину в средний диапазон машин для образцов. Запуск 64-разрядных Ubuntu на процессоре Intel (R) Core (TM) i7, 4 ГБ оперативной памяти.
Какая версия Matlab вы используете? – mtrw
MATLAB Version 7.10.0.499 (R2010a) – lindelof