Tengo una función que tarda mucho en ejecutarse. Cuando lo perfilo, me parece que más de la mitad del tiempo (26 de 50 segundos) no se tiene en cuenta en el desglose de línea por línea, y puedo mostrar que el tiempo se gasta después de que la función termina pero antes de que regrese el control por el siguiente método:MATLAB tarda mucho tiempo después de la última línea de una función
ts1 = tic;
disp ('calling function');
functionCall(args);
disp (['control returned to caller - ', num2str(toc(ts1))]);
la primera línea de la función que llamo es ts2 = tic
, y la última línea es
disp (['last line of function- ', num2str(toc(ts2))]);
el resultado es
llamando funcio n
última línea de la función - 24.0043
de control regresó a la persona que llama - 49,857
hurgando en la interwebs, creo que esto es un síntoma de la forma en MATLAB administra la memoria. Desasigna los retornos de funciones y, a veces, esto lleva mucho tiempo. La función asigna algunas matrices grandes (~ 1 millón de elementos). También funciona con identificadores, pero no crea ningún objeto nuevo de manejador o manejador de tienda explícitamente. Mis preguntas son:
- ¿Es esto definitivamente un problema de gestión de memoria?
- ¿Hay alguna forma sistemática de diagnosticar qué causa un problema en esta función, a diferencia de otras que regresan rápidamente?
- ¿Hay consejos generales para reducir la cantidad de tiempo que MATLAB pasa limpiando en una salida de función?
Ningún miembro del personal de MathWorks se ha ocupado de responder esta pregunta hasta el momento. Por lo tanto, reconocen silenciosamente que es un defecto de diseño fundamental de MATLAB. – Mikhail