Main Content

Perfile el código para mejorar su rendimiento

¿Qué es el perfilado?

El perfilado es una manera de medir cuánto tiempo lleva ejecutar código e identificar dónde MATLAB® emplea la mayor parte del tiempo. Después de identificar las funciones que consumen la mayor parte del tiempo, puede evaluarlas para obtener posibles mejoras de rendimiento. También puede perfilar el código para determinar qué líneas de código no se ejecutan. Determinar qué líneas de código no se ejecutan es útil cuando se llevan a cabo tests del código o como herramienta de depuración para ayudar a aislar un problema en el código.

Puede perfilar el código de manera interactiva utilizando el generador de perfiles de MATLAB o de forma programática utilizando la función profile. Para obtener más información acerca del perfilado del código de forma programática, consulte profile. Si está perfilando código que se ejecuta en paralelo, utilice el generador de perfiles paralelo Parallel Computing Toolbox™ para obtener un mejor resultado. Para obtener más detalles, consulte Profiling Parallel Code (Parallel Computing Toolbox).

Sugerencia

Si el código se optimiza de forma prematura, puede quedar innecesariamente complejo y no proporcionar una mejora de rendimiento significativa. Haga su primera ejecución lo más sencilla posible. Luego, si la velocidad resulta ser un problema, utilice el perfilado para identificar cuellos de botella.

Perfilar el código

Para perfilar el código y mejorar su rendimiento, utilice este proceso general:

  1. Ejecute Profiler sobre su código.

  2. Revise los resultados del resumen del perfilador.

  3. Investigue funciones y líneas de código individuales.

    Por ejemplo, puede que desee investigar funciones y líneas de código que utilizan una cantidad significativa de tiempo o a las que se llame con mayor frecuencia.

  4. Guarde los resultados del perfilado.

  5. Implemente potenciales mejoras de rendimiento en el código.

    Por ejemplo, si tiene una instrucción load dentro de un bucle, puede que pueda mover la instrucción load fuera del bucle, de forma que se llame solamente una vez.

  6. Guarde los archivos y ejecute clear all. Ejecute Profiler de nuevo y compare los resultados con los originales.

  7. Repita los pasos anteriores para seguir mejorando el rendimiento del código. Cuando el código emplea la mayor parte del tiempo en llamadas a unas pocas funciones internas, probablemente ha optimizado el código al máximo.

Ejecutar Profiler sobre su código

Para ejecutar Profiler sobre una línea de código:

  1. Abra Profiler yendo a la pestaña Apps, y en MATLAB, haciendo clic en el icono de la app Profiler. También puede escribir profile viewer en la ventana de comandos.

  2. Vaya a la pestaña Profiler y, en la sección Profile, introduzca el código que desee perfilar en el cuadro de edición.

    Por ejemplo, cree una función solvelotka.m que halle los picos de población de presas y depredadores para el ejemplo de Lotka-Volterra proporcionado con MATLAB:

    function [preypeaks,predatorpeaks] = solvelotka(t0, tfinal, y0)
        [~,y] = ode23(@lotka,[t0 tfinal],y0);
        
        preypeaks = calculatepeaks(y(:,1));
        predatorpeaks = calculatepeaks(y(:,2));
        
    end
    
    function peaks = calculatepeaks(A)
        [TF,P] = islocalmax(A);
        peaks = P(TF);
    end
    Introduzca esta instrucción en el cuadro de edición para perfilar la función solvelotka:
    [preypeaks,predatorpeaks] = solvelotka(0,15,[20;20])

    Si perfiló previamente la instrucción en la sesión de MATLAB actual, también puede seleccionarla de la lista desplegable de la caja de edición.

  3. Haga clic en Run and Time.

    Una vez finalizado el perfilado, Profiler muestra los resultados en Profile Summary. Las instrucciones que haya perfilado también se muestran como ejecutadas en la ventana de comandos.

Para perfilar un archivo de código abierto en el editor, en la pestaña Editor, en la sección Run, seleccione Run > Run and Time. Profiler perfila el archivo de código abierto en la pestaña actual del editor y muestra los resultados en Profile Summary.

Revisar los resultados en Profile Summary

Después de ejecutar Profiler sobre su código, Profile Summary presenta estadísticas sobre la ejecución general del código y proporciona estadísticas resumen para cada función a la que se ha llamado. Por ejemplo, esta imagen muestra el Profile Summary para la función solvelotka.

En la parte superior de los resultados de Profile Summary, una gráfica de llama muestra una representación visual del tiempo que MATLAB ha empleado en ejecutar el código. Cada función ejecutada se representa por una barra en la gráfica de llama. Las funciones definidas por el usuario se muestran en azul y las funciones de MathWorks® se muestran en gris.

Las funciones de la gráfica se muestran en orden jerárquico, apareciendo las funciones principales más abajo en la gráfica, y las funciones secundarias más arriba. La barra que se extiende por toda la parte inferior de la gráfica con la etiqueta Profile Summary representa todo el código ejecutado. La anchura de una barra en la gráfica representa la cantidad de tiempo que empleó la función en ejecutarse, como un porcentaje del total del tiempo de ejecución.

Para ver los valores reales de porcentaje y tiempo, así como el nombre completo de la función, coloque el cursor sobre la barra en la gráfica. Para mostrar información detallada sobre una función, incluyendo información sobre líneas de código individuales, haga clic en la barra que representa esa función.

La tabla de funciones debajo del marco de la llama muestra información similar a la de la gráfica de llama. Inicialmente las funciones aparecen ordenadas según cuánto tiempo tardaron en procesarse. Esta tabla describe la información en cada columna.

ColumnaDescripción
Function Name

Nombre de la función llamada por el código perfilado.

Calls

Número de veces que el código perfilado llamó a la función.

Total Time

Tiempo total empleado en la función, en segundos. El tiempo de la función incluye el tiempo empleado en funciones secundarias. La app Profiler en sí misma tarda cierto tiempo, que se incluye en los resultados. El tiempo total puede ser cero para archivos cuyo tiempo de ejecución sea intrascendente.

Self Time

Tiempo total en segundos empleado en una función, sin incluir el tiempo empleado en ninguna función secundaria. Self time también incluye algo de tiempo adicional como resultado del proceso de perfilado.

Total Time Plot

Gráfica que muestra el tiempo propio (self time) en comparación con el tiempo total.

Para ordenar la tabla de funciones por una columna específica, haga clic en la flecha en la cabecera de la columna. Por ejemplo, haga clic en la flecha en la columna Function Name para ordenar alfabéticamente las funciones. Inicialmente, los resultados aparecen ordenados por Total Time. Para mostrar información detallada sobre una función, incluyendo información sobre líneas de código individuales, haga clic en el nombre de la función.

Investigue funciones y líneas de código individuales

Para encontrar mejoras potenciales en el código, busque funciones en la gráfica de llamas o en la tabla de funciones que utilizan una cantidad significativa de tiempo o a las que se llama con mayor frecuencia. Haga clic en el nombre de una función para mostrar información detallada sobre la función, incluyendo información sobre líneas de código individuales. Por ejemplo, haga clic en la función solvelotka>calculatepeaks. La herramienta Profiler muestra información detallada para la función.

En la parte superior de la página, al lado del nombre de la función actual, Profiler muestra el número de veces que una función principal llamó a la función y el tiempo total empleado en la función. Utilice los enlaces que se muestran debajo de la gráfica de llamas para abrir la función en su editor predeterminado o copie los resultados que se muestran en una ventana separada.

Para volver a Profile Summary, en la pestaña Profiler, haga clic en el botón Profile Summary. También puede hacer clic en la barra Profile Summary en la parte inferior de la gráfica de llamas.

Una vez haya hecho clic en una función individual, Profiler muestra información adicional en estas secciones:

SecciónDetalles
Flame Graph

Gráfica de llamas que muestra una representación visual del tiempo que MATLAB empleó en ejecutar la función perfilada. La gráfica muestra la jerarquía de la función perfilada, incluyendo funciones secundarias (que se muestran encima de la función actual) y funciones principales (que se muestran debajo de la función actual). Las funciones definidas por el usuario se muestran en azul (), y las funciones de MathWorks se muestran en gris ().

Coloque el cursor sobre la barra en la gráfica para ver los valores reales de porcentaje y tiempo, así como el nombre completo de la función. Haga clic en una barra que represente a una función para mostrar información detallada sobre la función.

Parents

Lista de funciones que llaman a la función perfilada, incluyendo el número de veces que la función principal llamó a la función perfilada.

Haga clic en el nombre de una función de la lista para mostrar información detallada sobre la función.

Lines that take the most time

Lista de líneas de código en la función perfilada que utilizan la mayor cantidad de tiempo de procesamiento.

Haga clic en una línea de código para verla en la sección Function Listing, dentro del contexto del resto del código de la función.

Children

Lista de todas las funciones llamadas por la función perfilada.

Haga clic en el nombre de una función de la lista para mostrar información detallada sobre la función.

Code Analyzer results

Lista de problemas y mejoras potenciales para la función perfilada.

Coverage results

Estadísticas de cobertura de código sobre las líneas de código en la función que MATLAB ejecutó durante el perfilado.

Para realizar un análisis adicional de cobertura de código, consulte Collect Statement and Function Coverage Metrics for MATLAB Source Code.

Function listing

Código fuente de la función, si es un archivo de código de MATLAB.

Para cada línea de código, Function listing incluye estas columnas:

  • Tiempo de ejecución para cada línea de código

  • Número de veces que MATLAB ejecutó la línea de código

  • El número de línea.

    Haga clic en un número de línea en Function listing para abrir la función en su editor predeterminado.

  • El código fuente de la función. El color del texto indica lo siguiente:

    • Verde: líneas comentadas

    • Negro: líneas de código ejecutadas

    • Gris: líneas de código no ejecutadas

De forma predeterminada, Profiler resalta las líneas de código con el tiempo de ejecución más largo. Cuanto más oscuro sea el resaltado, más tardó en ejecutarse la línea de código. Para cambiar los criterios de resaltado, vaya a la pestaña Profiler y, en la sección View, haga clic en Highlight . Seleccione entre las opciones de resaltado disponibles. Por ejemplo, para resaltar líneas de código que no se ejecutaron, seleccione la opción Non coverage.

Guarde los resultados

Para comparar el impacto de los cambios después de haber realizado mejoras en el código, guarde los resultados del perfilado. Para guardar los resultados, utilice el enlace que aparece debajo de la gráfica de llamas para copiar los resultados mostrados en una ventana separada.

También puede imprimir sus resultados desde Profiler yendo a la pestaña Profiler y haciendo clic en el botón Print.

Perfilar múltiples instrucciones en la ventana de comandos

Para perfilar más de una instrucción en la ventana de comandos:

  1. Vaya a la ventana de comandos y escriba profile on.

  2. Introduzca y ejecute las instrucciones que desee perfilar.

  3. Tras ejecutar todas las instrucciones, escriba profile off.

  4. Abra Profiler escribiendo profile viewer. También puede ir a la pestaña Apps y, en MATLAB, hacer clic en el icono de la app Profiler.

  5. Revise los resultados de Profile Summary.

Perfilar una app

Puede perfilar aplicaciones creadas en App Designer. También puede perfilar aplicaciones que se incluyen con los productos de MathWorks, como la herramienta Filter Design and Analysis incluida con Signal Processing Toolbox™.

Para perfilar una app:

  1. Abra Profiler yendo a la pestaña Apps, y en MATLAB, haciendo clic en el icono de la app Profiler. También puede escribir profile viewer en la ventana de comandos.

  2. En la sección Profile de la barra de herramientas de Profiler, haga clic en Start Profiling. Asegúrese de que no haya nada de código en el cuadro de edición a la derecha del botón.

  3. Inicie la app.

  4. Utilice la app.

  5. Cuando haya terminado, haga clic en Stop Profiling en la barra de herramientas de Profiler.

  6. Revise los resultados de Profile Summary.

Nota

Para excluir el proceso de inicio de la app en el perfil, invierta los pasos 2 y 3. En otras palabras, inicie la app antes de hacer clic en Start Profiling.

Consulte también

Apps

Funciones

Temas relacionados