155 votes

Comment faire pour déboguer un programme MPI ?

J'ai un MPI programme qui compile et s'exécute, mais je voudrais étape, par ce biais, assurez-vous que rien de bizarre qui se passe. Idéalement, je voudrais un moyen simple de joindre GDB pour tout processus particulier, mais je ne suis pas vraiment sûr de savoir si c'est possible ou comment le faire. Une alternative serait d'avoir chaque processus d'écriture de la sortie de débogage à un fichier journal distinct, mais cela ne donne pas vraiment de la même liberté que d'un débogueur.

Existe-il des approches mieux? Comment déboguer des programmes MPI?

103voto

messenjah Points 199

J'ai trouvé gdb tout à fait utile. Je l'utilise comme

mpirun -np <NP> xterm -e gdb ./program 

Ce la lance xterm windows en qui je peux faire

run <arg1> <arg2> ... <argN>

généralement fonctionne correctement

[édité]

66voto

tgamblin Points 25755

Comme quelqu'un a dit, TotalView est la norme pour cette. Mais il va vous coûter un bras et une jambe.

Le OpenMPI site a une grande FAQ sur MPI de débogage. Point n ° 6 dans la FAQ explique comment joindre GDB pour les processus MPI. Lire l'intégralité de chose, il ya quelques conseils.

Si vous trouvez que vous avez trop nombreux processus à suivre, même si, découvrez Trace de la Pile de l'Outil d'Analyse (STAT). Nous utilisons ce à Livermore à recueillir les traces de pile de potentiellement des centaines de milliers de processus en cours d'exécution et de les représenter de manière intelligente pour les utilisateurs. Ce n'est pas un plein de fonctionnalités du débogueur (un plein de fonctionnalités du débogueur ne serait jamais à l'échelle de 208k cœurs), mais il vous dira quels sont les groupes de processus sont en train de faire la même chose. Vous pouvez ensuite étape par le biais d'un représentant de chaque groupe au standard d'un débogueur.

36voto

Wesley Bland Points 3062

Beaucoup de posts ici sont de GDB, mais ne mentionne pas comment attacher à un processus de démarrage. Évidemment, vous pouvez joindre à tous les processus:

mpiexec -n X gdb ./a.out

Mais qui est très inefficace puisque vous aurez à faire rebondir autour de démarrer jusqu'à l'ensemble de vos processus. Si vous voulez juste pour déboguer une (ou un petit nombre de processus MPI, vous pouvez l'ajouter comme un exécutable séparé sur la ligne de commande à l'aide de l' : opérateur:

mpiexec -n 1 gdb ./a.out : -n X-1 ./a.out

Maintenant, un seul de vos processus, vous obtiendrez GDB.

18voto

Mark Points 326

Comme d'autres l'ont mentionné, si vous travaillez seulement avec une poignée de processus MPI vous pouvez essayer d'utiliser plusieurs gdb sessions, la redoutable valgrind ou rouler vos propres printf / solution d'enregistrement.

Si vous êtes en utilisant des processus plus que cela, vous commencez vraiment à avoir besoin d'un bon débogueur. Le OpenMPI FAQ recommande à la fois Allinea DDT et TotalView.

Je travaille sur Allinea DDT. C'est un plein de fonctionnalités, source graphique-débogueur de code donc oui, vous pouvez:

  • Debug ou attacher (plus de 200k) processus MPI
  • Étape et de les mettre en veille, en groupe ou individuellement
  • Ajouter des points d'arrêt, les montres et les points de trace ne
  • Attraper les erreurs de mémoire et les fuites

...et ainsi de suite. Si vous avez utilisé Eclipse ou Visual Studio, alors vous serez à la maison.

Nous avons ajouté quelques fonctionnalités intéressantes spécialement pour le débogage parallèle de code (MPI, multi-thread ou CUDA):

  • Variables scalaires sont automatiquement comparées à travers tous les processus: Sparklines showing values across processes

  • Vous pouvez également suivi et filtrer les valeurs des variables et des expressions sur les processus et le temps: Tracepoints log values over time

Il est largement utilisé parmi top500 HPC sites, tels que l' ORNL, NCSA, LLNL, Juliers et. al.

L'interface est assez accrocheur; nous avons chronométré le renforcement et la fusion des piles et des variables de processus de 220 000 à 0,1 s dans le cadre du test d'acceptation sur Oak Ridge du Jaguar cluster.

@tgamblin mentionné l'excellent STAT, qui s'intègre avec Allinea DDT, comme le font plusieurs autres projets open source les plus populaires.

8voto

Chad Brewbaker Points 1101

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X