Manual de uso

⌘K
  1. Inicio
  2. Manual de uso
  3. 7. Compilación de program...
  4. Análisis de Rendimiento (Profiling)

Análisis de Rendimiento (Profiling)

El profiling es una fase crítica en el desarrollo de software científico para HPC. Permite inspeccionar la ejecución de un código para medir el consumo de tiempo de CPU, los accesos a la memoria memoria caché y la eficiencia de la vectorización. El objetivo es identificar cuellos de botella (las funciones o líneas de código que ralentizan la simulación) para aplicar optimizaciones.

En PROTEUS disponemos de herramientas que abarcan desde enfoques básicos por software hasta suites avanzadas de análisis arquitectónico.

1. Preparación del código: el flag de depuración (-g)

Para cualquier herramienta de profiling, es fundamental que el compilador mantenga la correspondencia entre las instrucciones binarias y las líneas del código fuente original. Añada siempre el flag -g en su comando de compilación, manteniendo activos sus flags de optimización habituales (v.g., -O3 -march=znver4).

gcc -O3 -march=znver4 -g mi_codigo.c -o mi_codigo_prof.exe -lm

Nota: A diferencia de la depuración estándar, combinar -O3 con -g no degrada el rendimiento de la simulación; únicamente añade metadatos de depuración esenciales para que el profiler identifique las funciones nativas.

2. Herramientas Básicas del Sistema

A) Gprof (GNU Profiler)

Herramienta clásica basada en instrumentación por software. Es ideal para análisis rápidos de flujos secuenciales o códigos OpenMP sencillos.

  1. Compilación obligatoria con flag -pg:

    Bash

    gcc -O3 -g -pg mi_codigo.c -o prog_gprof.exe -lm
    
  2. Ejecución: Ejecute el programa (preferiblemente mediante una tarea corta en Slurm). Al finalizar, el código generará de forma automática un archivo de datos crudos llamado gmon.out.

  3. Generación del reporte: Procese el archivo con el comando gprof:

    Bash

    gprof prog_gprof.exe gmon.out > reporte_rendimiento.txt
    

El archivo de texto resultante mostrará el Flat Profile (el porcentaje de tiempo consumido por cada función) y el Call Graph (la jerarquía de llamadas).

B) Perf (Linux Profiler)

Herramienta nativa de Linux para análisis por muestreo estadístico. No requiere compilar con flags especiales (más allá de -g).

  • Uso recomendado en scripts de Slurm:

    Bash

    srun perf record -g ./mi_codigo_prof.exe
    
  • Visualización: Una vez generado el archivo perf.data, puede inspeccionar el desglose de hilos y funciones interactivamente desde la terminal del nodo mediante:

    Bash

    perf report
    

3. Suites Avanzadas (Módulos de Alto Rendimiento)

Para códigos complejos de física computacional, se recomienda el uso de las herramientas de instrumentación avanzada provistas por Intel y AMD.

A) Intel VTune Profiler (Optimizado para Nodos Intel)

Es una de las herramientas más potentes de la industria para analizar la concurrencia de hilos (OpenMP/TBB), desequilibrios de carga, y el uso del subsistema de memoria.

  • Carga del entorno:

    Bash

    module load intel-oneapi/2025.3.1
    
  • Recolección de datos (Modo Muestreo de Usuario): Para evitar posibles restricciones de seguridad en el kernel del clúster respecto a los contadores de hardware, se aconseja utilizar el modo Hotspots enfocado en software (user-mode sampling):

    Bash

    # Dentro de un script de Slurm
    vtune -collect hotspots -knob sampling-mode=user -result-dir=vtune_report ./mi_codigo_prof.exe
    

B) Intel Advisor (Análisis de Vectorización y Techo Teórico)

Específicamente diseñado para evaluar si sus bucles están aprovechando las instrucciones vectoriales (AVX-512) y evaluar el rendimiento mediante el modelo Roofline (límite por ancho de banda de memoria vs. límite por cómputo de la CPU).

  • Recolección de datos:

    Bash

    advisor -collect survey -result-dir=adv_report ./mi_codigo_prof.exe
    

C) AMD uProf (Optimizado para Nodos Nix, Orion, Perseo, Quimera, Rodas)

Esta es la herramienta mandatoria cuando sus simulaciones corren sobre los procesadores AMD EPYC (Zen 4 y Zen 5) de Proteus. Permite analizar la eficiencia energética, los accesos a los complejos de caché (CCX) y las penalizaciones de memoria NUMA.

  • Carga del entorno:

    Bash

    module load amd-uprof/5.0.0
    
  • Recolección en texto/datos:

    Bash

    AMDuProfCLI collect --time-limit 60 -o ./amd_report ./mi_codigo_prof.exe
    

4. Visualización Gráfica de los Reportes (GUI)

Las suites avanzadas (vtune, advisor, AMDuProf) generan directorios de datos complejos que son difíciles de interpretar en modo texto. Proteus ofrece dos metodologías para interactuar con las interfaces gráficas (GUI) de estas herramientas:

Opción A: A través de OpenOnDemand (Recomendado)

La plataforma web OpenOnDemand del clúster permite lanzar sesiones de Escritorio Virtual (VNC) directamente en el navegador web.

  1. Acceda a la interfaz web de Proteus OpenOnDemand.

  2. Solicite una sesión de Interactive Apps -> Desktop.

  3. Abra una terminal dentro de ese escritorio virtual, cargue el módulo correspondiente (ej. module load intel-oneapi) y ejecute la interfaz gráfica directamente:

    Bash

    vtune-gui &
    

    (Esta opción ofrece la menor latencia y la mejor experiencia de usuario para interactuar con las gráficas de rendimiento).

Opción B: Redirección Gráfica por SSH (SSH -X / -Y)

Si prefiere trabajar desde la terminal local de su estación de trabajo, asegúrese de iniciar sesión en el clúster habilitando el reenvío del servidor X11:

Bash

ssh -Y usuario@proteus.clúster

Una vez dentro (y tras reservar un nodo de cálculo de forma interactiva si va a realizar análisis en caliente), puede invocar los entornos gráficos:

Bash

vtune-gui vtune_report &
AMDuProf &

💡 Consejo de eficiencia: Dado que las interfaces gráficas pesadas pueden experimentar ralentizaciones a través de conexiones de red lentas por SSH, una práctica altamente eficiente consiste en realizar la recolección de datos (collect) en el clúster mediante scripts de Slurm, descargar la carpeta de resultados a su ordenador personal mediante rsync o scp, y abrir los datos localmente utilizando las versiones gratuitas de Intel VTune o AMD uProf instaladas en su propio sistema operativo.

¿Cómo podemos ayudarte?