Welche Software eignet sich für das parallele Debuggen?

24

Momentan führe ich keinen parallelen Code aus, ich erwarte jedoch, zukünftig parallelen Code mit einem Hybrid aus OpenMP und MPI auszuführen. Bei der Ausführung von Serienprojekten waren Debugger für mich von unschätzbarem Wert.

Kann jemand einen parallelen Debugger (oder mehrere Debugger) zum Debuggen paralleler Software empfehlen? Freie Software wäre vorzuziehen, aber zögern Sie nicht, effektive kommerzielle Software zu erwähnen.

Geoff Oxberry
quelle
Ich verstehe nicht, wie sich die Antworten hier erheblich von denen von stackoverflow.com/questions/329259/… unterscheiden . MPI ist hier der harte Teil, nicht das OpenMP. Das Debuggen von Race-Bedingungen in Thread-Programmen ist derzeit ohnehin nicht lösbar.
Jeff
ThreadSanitizer ist eine gute Lösung zum Debuggen von Race-Bedingungen in Thread-Programmen, obwohl mir niemand bekannt ist, der versucht hat, MPI in die Mischung aufzunehmen!
Abraham

Antworten:

17

Grundsätzlich gibt es zwei große kommerzielle Optionen: DDT von Allinea (wie wir es bei TACC verwenden ) und Totalview (wie im anderen Kommentar erwähnt). Sie haben vergleichbare Eigenschaften, sind beide aktiv entwickelt und direkte Konkurrenten.

Eclipse verfügt über die Parallel Tools Platform , die MPI- und OpenMP-Programmierunterstützung sowie einen parallelen Debugger enthalten sollte.

Bill Barth
quelle
Ich habe noch nie von jemandem gehört, der den parallelen PTP-Debugger verwendet. Ich bin mir nicht sicher, was das bedeutet ...
Jeff
Ich habe ein paar Kollegen, die es versucht haben, aber ich habe selbst nie damit gespielt.
Bill Barth
16

Ich muss dem Curmudgeon antworten. Meine Produktivität wurde durch keinen der obigen Vorschläge verbessert. Sie sind langsam und teuer im Vergleich zu meiner bevorzugten parallelen Option: eine GDB-Sitzung pro Prozess. Jede GDB kann sich mit einem MPI-Prozess verbinden und in einem xterm sitzen (dies geschieht automatisch in PETSc mit -start_in_debugger). Ich benutze das seit 15 Jahren glücklich. Einwände:

1) Ich kann keine globalen Daten einsehen

Da es sich bei MPI um ein Shared-None-Modell handelt, gibt es keine globalen Daten, sondern nur lokale Daten

2) Diese Strategie lässt sich nicht auf viele Prozesse skalieren

Weder tun Käfer. Fehler treten bei einzelnen Prozessen auf, möglicherweise bei Eingaben von 1 oder 2 Nachbarn. Sie können leicht nur auf den beteiligten Prozessen GDB erzeugen (in PETSc verwenden Sie -debugger_nodes 0,5,17zum Beispiel). Außerdem geben die oben genannten Systeme viel auf, wenn sie bei jedem Prozess ausgeführt werden, was sie langsam macht. Die GDB-Methode ist in der Tat viel skalierbarer.

gdb ist auch sehr portabel. Es läuft überall, versteht C ++ und Fortran und ermöglicht es Ihnen, beliebigen Code innerhalb des Laufs auszuführen. Ich habe spezielle Funktionen geschrieben, um Daten beim Ausführen einfach anzuzeigen.

Matt Knepley
quelle
4
Hey Feigling, wenn Sie abstimmen, hinterlassen Sie einen Kommentar.
Matt Knepley
5
Ich war nicht die Down-Stimme, aber ich bin einigermaßen anderer Meinung. Ich habe ein paar Bugs im Maßstab entdeckt, die in kleinen Größen nicht angezeigt wurden, und die Verwendung eines parallelen Debuggers war ein effizienter Weg, um sie zu finden. Ich habe den größten Teil meines Debuggens mit printf und das Anhängen an einzelne Prozesse mit gdb ausgeführt, aber ich habe den Vorteil eines parallelen Debuggers erkannt.
Bill Barth
3
Das einzige Mal, dass ich jemals auf einen Fehler in der Größenordnung gestoßen bin, war ein Leistungsfehler, weil ein falscher kollektiver Kommunikationsalgorithmus ausgewählt wurde. Andererseits ist meine Ansicht sogar noch extremer als die von Matt, da das, was einem Debugger am nächsten kommt, den ich jemals benutze, Valgrind ist.
Jack Poulson
1
@ BillBarth Ich weiß, Sie haben Recht, dass es Fehler bei 1000 Prozessen gibt, die bei kleineren Problemen nicht auftauchen (Dinesh hatte ein berühmtes PETSc, das monatelang andauerte und nur bei 82 Prozessen auftauchte). Es ging mir mehr darum, der vorherrschenden Weisheit entgegenzuwirken. Ich denke, parallele Debugger sind ein guter letzter Ausweg, nicht der erste Ausweg.
Matt Knepley
3
Ich habe dich runtergestimmt. Deine Antwort war nicht was gefragt wurde.
Aterrel
5

Ich benutze nur zwei Debugger für serielle und parallele Programme:

  1. Der Kernighan-Debugger, dh vernünftige Druckaussagen und sorgfältiges Denken.
  2. Mehrere Instanzen von GDB wie beschrieben o http://www.open-mpi.org/faq/?category=debugging#serial-debuggers .

Für den Fall, dass (2) nicht ausreichend skalierbar ist, verweise ich auf (1b).

Jeff
quelle
1
Ich habe noch nie den Namen "Kernighan Debugger" gehört, aber ich bin damit einverstanden, da ich so immer debugge.
Jack Poulson
4

Es gibt Intel Parallel Studio, das einen parallelen Debugger enthält. Ich habe noch nie damit gearbeitet, aber ich habe gesehen, wie es in einigen Demos verwendet wurde. Hier ist ein Video-Tutorial , das einige der Funktionen zeigt.

Ich habe auch ein paar Wrapper um gdb gesehen, die in bestimmten Fällen einigermaßen gut funktionierten.

Ank
quelle
3

Gesamtansicht . Es ist ein kommerzieller Debugger. Es ist sehr einfach, den Stapel auf jedem Prozessor anzuzeigen. Sie können Variablenwerte prozessor- / threadübergreifend anzeigen (und ändern). Sie können Vektoren oder Matratzen zeichnen, um variable Werte zu visualisieren. Anscheinend ist auch Scripting (Tk / Tcl) für eine ausgefeilte Watchpoint-Analyse möglich, obwohl ich selbst noch nie damit gearbeitet habe.

Yann
quelle
Als das HPC-Zentrum meiner Universität dies installierte, hielt ich es für übertrieben. Dann fand ich heraus, wie einfach es war, ein sehr kompliziertes Debugging durchzuführen. Es ist wirklich ein tolles Programm.
Yann
Ich zweiter totalview auch. Ich habe es in vielen Fällen verwendet und es ist extrem leistungsfähig, wenn auch sehr teuer ...
BlaB
1

Ich frage mich, warum niemand Padb (Parallel Application Debugger) erwähnt hat, das Open Source und freie Software bevorzugt, aber nicht so leistungsfähig ist wie kommerzielle Gegenstücke, zum Beispiel TotalView für HPC

Hefnawi
quelle
-1

Hier eine Zusammenfassung einiger Antworten, die ich zuvor erhalten habe:

OpenMP hat Timing-Funktionen: omp_get_wtime()und omp_get_wtick()- Online-Dokumente

Google hat einen CPU-Profiler

Es gibt Scalasca , das OpenMP- und MPI-Profile und -Analysen durchführt

Dann gibt es Tau und Vtune, die ich nicht benutzt habe.

Viel Glück!

Mikhail
quelle
Ich glaube nicht, dass es um das Timing geht, aber ich könnte mich irren. Gute Vorschläge aber ...
Yann
In dieser Antwort geht es mehr um Profilerstellung als um das Debuggen ...
mbq
Ich habe festgestellt, dass Profilerstellungstools einen guten Ersatz für parallele Debugger darstellen. Ich finde es oft so, dass parallele Fehler mit Leistungsproblemen zusammenhängen, wie z. B. Logjam in MPI. Performance-Tools werden dies oft offenbaren. Mit dem Speicher-Profiler von TAU können Sie herausfinden, warum zufällige Fehler auftreten können.
Jeff