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.