У меня есть функция, которая занимает много времени. Когда я его просматриваю, я обнаружил, что в течение половины времени (26 из 50 секунд) не учитывается в разбивке по строкам, и я могу показать, что время тратится после завершения работы функции, но до того, как она вернет управление следующим способом:
ts1 = tic;
disp ('calling function');
functionCall(args);
disp (['control returned to caller - ', num2str(toc(ts1))]);
Первая строка вызываемой функции ts2 = tic
, а последняя строка
disp (['last line of function- ', num2str(toc(ts2))]);
Результат
вызывающая функция
последняя строка функции - 24.0043
управление возвращается вызывающему абоненту - 49.857
Нажав на interwebs, я думаю, что это симптом того, как MATLAB управляет памятью. Он освобождает от возврата функции, а иногда это занимает много времени. Функция выделяет несколько больших (~ 1 миллион элементов) массивов. Он также работает с дескрипторами, но не создает никаких новых объектов дескриптора или хранит дескрипторы явно. Мои вопросы:
- Это определенно проблема управления памятью?
- Есть ли какой-либо систематический способ диагностики того, что вызывает проблему в этой функции, в отличие от других, которые быстро возвращаются?
- Существуют ли общие советы по сокращению времени, которое MATLAB проводит на выходе функции?