Je n'exécute aucun code parallèle pour le moment, mais je prévois d'exécuter du code parallèle à l'avenir en utilisant un hybride d'OpenMP et de MPI. Les débogueurs ont été des outils précieux pour moi lors de l'exécution de projets en série.
Quelqu'un peut-il recommander un débogueur parallèle (ou plusieurs débogueurs) à utiliser pour déboguer un logiciel parallèle? Un logiciel libre serait préférable, mais n'hésitez pas à mentionner un logiciel commercial efficace.
software
parallel-computing
Geoff Oxberry
la source
la source
Réponses:
Il existe essentiellement deux choix commerciaux majeurs: le DDT d'Allinea (qui est ce que nous utilisons au TACC ) et Totalview (comme mentionné dans l'autre commentaire). Ils ont des caractéristiques comparables, sont tous deux activement développés et sont des concurrents directs.
Eclipse a sa plate - forme d'outils parallèles , qui devrait inclure le support de programmation MPI et OpenMP et un débogueur parallèle.
la source
Je dois répondre au curmudgeon. Ma productivité n'a jamais été améliorée par l'une des suggestions ci-dessus. Ils sont lents et coûteux par rapport à mon option préférée en parallèle: une session gdb par processus. Chaque gdb peut se connecter à un processus MPI et s'asseoir dans un xterm (cela se produit automatiquement dans PETSc en utilisant
-start_in_debugger
). Je l'utilise depuis 15 ans, heureusement. Objections:1) Je ne peux pas regarder les données globales
Puisque MPI est un modèle à partage nul, il n'y a pas de données globales, seulement des données locales
2) Cette stratégie ne s'adapte pas à de nombreux processus
Les bogues non plus. Des bugs se produisent sur des processus individuels, peut-être avec l'entrée de 1 ou 2 voisins. Vous pouvez facilement générer gdb uniquement sur les processus participants (dans PETSc que vous utilisez
-debugger_nodes 0,5,17
par exemple). En outre, les systèmes ci-dessus abandonnent beaucoup lors de l'exécution de chaque processus, ce qui les ralentit. La méthode gdb est, en fait, beaucoup plus évolutive.gdb est également très portable. Il s'exécute partout, comprend C ++ et Fortran et vous permet d'exécuter du code arbitraire à l'intérieur de l'exécution. J'ai écrit des fonctions spéciales pour afficher facilement les données lors de leur exécution.
la source
J'utilise seulement deux débogueurs pour les programmes série et parallèle:
Dans le cas où (2) n'est pas suffisamment évolutif, je me réfère à (1b).
la source
Il y a Intel Parallel Studio qui inclut un débogueur parallèle. Je ne l'ai jamais travaillé mais je l'ai vu utilisé dans quelques démos. Voici un didacticiel vidéo qui montre certaines des fonctionnalités.
J'ai également vu quelques wrappers autour de gdb qui fonctionnaient assez bien dans certains cas.
la source
Totalview . C'est un débogueur commercial. Il est très facile de visualiser la pile sur chaque processeur. Vous pouvez voir les valeurs variables (et les modifier) à travers les processeurs / threads. Vous pouvez tracer des vecteurs ou des matraques pour visualiser les valeurs des variables. Apparemment, les scripts sont également possibles (Tk / Tcl), pour une analyse sophistiquée des points d'observation, bien que je n'ai jamais travaillé avec cela moi-même.
la source
Pour quelques façons simples de déboguer des codes parallèles, nous avons collecté quelques réponses dans la FAQ deal.II dans la section sur le débogage: https://github.com/dealii/dealii/wiki/Frequently-Asked-Questions#debugging -dealii-applications
la source
Je me demande pourquoi personne n'a mentionné Padb (Parallel Application Debugger) qui est un logiciel libre et open source comme l'OP le préfère, mais pas aussi puissant que ses homologues commerciaux par exemple: TotalView pour HPC
la source
Voici un résumé de quelques réponses qui m'ont été données précédemment:
OpenMP a des fonctions de chronométrage:
omp_get_wtime()
etomp_get_wtick()
- documents en ligneGoogle a un profileur CPU
Il y a Scalasca qui fait le profil et l'analyse OpenMP et MPI
Ensuite, il y a Tau et vtune que je n'ai pas utilisés.
Bonne chance!
la source