¿Qué software es bueno para usar para la depuración paralela?

24

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.

Geoff Oxberry
fuente
No veo cómo las respuestas aquí diferirán significativamente de stackoverflow.com/questions/329259/… . MPI es la parte difícil aquí, no OpenMP. En cualquier caso, la depuración de las condiciones de carrera en los programas roscados es casi imposible de resolver en este momento.
Jeff
ThreadSanitizer es una buena solución para depurar las condiciones de carrera en programas con subprocesos, aunque no conozco a nadie que haya intentado agregar MPI a la mezcla.
mabraham

Respuestas:

17

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.

Bill Barth
fuente
Nunca he oído hablar de nadie que use el depurador paralelo PTP. No estoy seguro de lo que eso significa ...
Jeff
Tengo algunos colegas que lo han intentado, pero nunca he jugado con él.
Bill Barth
16

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,17por 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.

Matt Knepley
fuente
44
Hola, cobarde, si votas mal, deja un comentario.
Matt Knepley
55
No fui el voto negativo, pero no estoy de acuerdo en alguna medida. Encontré algunos errores a escala que no se mostraban en tamaños pequeños, y usar un depurador paralelo era una forma eficiente de encontrarlos. Realizo la mayor parte de mi depuración con printf y me adjunto a procesos individuales con gdb, pero he visto el beneficio de tener un depurador paralelo.
Bill Barth
3
La única vez que encontré un error a escala fue un error de rendimiento debido a que se eligió un algoritmo de comunicación colectiva inadecuado. Por otra parte, mi punto de vista es aún más extremo que el de Matt, ya que lo más parecido a un depurador que uso es valgrind.
Jack Poulson
1
@BillBarth Sé que tienes razón en que existen errores en 1000 procesos que no aparecen en problemas más pequeños (Dinesh tenía un famoso PETSc que duró meses y solo apareció en 82 procs). Mi punto era más para contrarrestar la sabiduría predominante. Creo que los depuradores paralelos son un buen último recurso, no el primer recurso.
Matt Knepley
3
Te rechacé. Su respuesta no es lo que se le preguntó.
aterrel
5

Solo uso dos depuradores para programas en serie y paralelos:

  1. El depurador de Kernighan, es decir, juiciosos impresos y reflexiones cuidadosas.
  2. Múltiples instancias de GDB como se describe en http://www.open-mpi.org/faq/?category=debugging#serial-debuggers .

En el caso donde (2) no es suficientemente escalable, me refiero a (1b).

Jeff
fuente
1
Nunca escuché el nombre "depurador de Kernighan", pero lo apruebo, ya que así es como siempre depuro.
Jack Poulson
4

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.

ank
fuente
3

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.

Yann
fuente
En el aspecto subjetivo, cuando el centro HPC de mi universidad instaló esto, pensé que era excesivo. Luego descubrí lo fácil que era hacer una depuración muy complicada. Es realmente un gran programa.
Yann
Yo segundo totalview también. Lo he usado en muchos casos y es muy potente, aunque muy caro ...
blab
1

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

Hefnawi
fuente
-1

Aquí hay un resumen de algunas respuestas que me dieron anteriormente:

OpenMP tiene funciones de temporización: omp_get_wtime()y omp_get_wtick()- documentos en línea

Google 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!

Mikhail
fuente
No creo que la pregunta sea sobre el tiempo, pero podría estar equivocado. Buenas sugerencias, aunque ...
Yann
Esta respuesta es más acerca de perfiles de depuración ...
MBq
He descubierto que las herramientas de creación de perfiles son buenos sustitutos de los depuradores paralelos. A menudo encuentro que los errores paralelos están relacionados con problemas de rendimiento, como logjam en MPI. Las herramientas de rendimiento a menudo revelarán esto. El generador de perfiles de memoria de TAU es bueno para descubrir por qué pueden ocurrir segfaults aleatorios.
Jeff