No estoy ejecutando ningún código paralelo en este momento, pero preveo ejecutar código paralelo en el futuro usando un híbrido de OpenMP y MPI. Los depuradores han sido herramientas invaluables para mí al ejecutar proyectos en serie.
¿Alguien puede recomendar un depurador paralelo (o múltiples depuradores) para usar para depurar software paralelo? Sería preferible el software libre, pero no dude en mencionar el software comercial efectivo.
software
parallel-computing
Geoff Oxberry
fuente
fuente
Respuestas:
Básicamente, existen dos opciones comerciales principales: DDT de Allinea (que es lo que usamos en TACC ) y Totalview (como se menciona en el otro comentario). Tienen características comparables, están desarrolladas activamente y son competidores directos.
Eclipse tiene su plataforma de herramientas paralelas , que debe incluir soporte de programación MPI y OpenMP y un depurador paralelo.
fuente
Debo dar la respuesta al cascarrabias. Mi productividad nunca ha sido mejorada por ninguna de las sugerencias anteriores. Son lentos y caros en comparación con mi opción preferida en paralelo: una sesión de gdb por proceso. Cada gdb puede conectarse a un proceso MPI y sentarse en un xterm (esto sucede automáticamente en PETSc usando
-start_in_debugger
). He usado esto durante 15 años, felizmente. Objeciones:1) No puedo mirar datos globales
Como MPI es un modelo de ninguno compartido, no hay datos globales, solo datos locales
2) Esta estrategia no escala a muchos procesos
Tampoco los errores. Los errores ocurren en procesos individuales, tal vez con la entrada de 1 o 2 vecinos. Usted puede generar gdb fácilmente solo en los procesos participantes (en PETSc que utiliza,
-debugger_nodes 0,5,17
por ejemplo). Además, los sistemas anteriores ceden mucho cuando se ejecutan en cada proceso, lo que los hace lentos. El método gdb es, de hecho, mucho más escalable.gdb también es muy portátil. Se ejecuta en todas partes, comprende C ++ y Fortran, y le permite ejecutar código arbitrario dentro de la ejecución. He escrito funciones especiales para mostrar fácilmente los datos cuando se ejecuta en él.
fuente
Solo uso dos depuradores para programas en serie y paralelos:
En el caso donde (2) no es suficientemente escalable, me refiero a (1b).
fuente
Existe Intel Parallel Studio, que incluye un depurador paralelo. Nunca he trabajado con él, pero lo he visto utilizado en algunas demostraciones. Aquí hay un video tutorial que muestra algunas de las características.
También he visto algunas envolturas alrededor de gdb que funcionaron razonablemente bien en ciertos casos.
fuente
Totalview . Es un depurador comercial. Es muy fácil ver la pila en cada procesador. Puede ver valores variables (y cambiarlos) en procesadores / subprocesos. Puede trazar vectores o matracies para visualizar valores variables. Aparentemente, las secuencias de comandos también son posibles (Tk / Tcl), para un análisis de punto de observación sofisticado, aunque nunca he trabajado con esto.
fuente
Durante un par simples formas de códigos paralelos de depuración, hemos recogido algunas respuestas en el deal.II preguntas más frecuentes en el apartado de depuración: https://github.com/dealii/dealii/wiki/Frequently-Asked-Questions#debugging -dealii-aplicaciones
fuente
Me pregunto por qué nadie mencionó Padb (Depurador de aplicaciones paralelas), que es de código abierto y software libre como lo prefiere el OP, pero no tan poderoso como sus homólogos comerciales, por ejemplo: TotalView para HPC
fuente
Aquí hay un resumen de algunas respuestas que me dieron anteriormente:
OpenMP tiene funciones de temporización:
omp_get_wtime()
yomp_get_wtick()
- documentos en líneaGoogle tiene un generador de perfiles de CPU
Hay Scalasca que hace análisis y perfil de OpenMP y MPI
Luego está Tau y vtune que no he usado.
¡Buena suerte!
fuente