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.
software
parallel-computing
Geoff Oxberry
quelle
quelle
Antworten:
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.
quelle
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,17
zum 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.
quelle
Ich benutze nur zwei Debugger für serielle und parallele Programme:
Für den Fall, dass (2) nicht ausreichend skalierbar ist, verweise ich auf (1b).
quelle
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.
quelle
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.
quelle
Für ein paar einfache Möglichkeiten zum Debuggen paralleler Codes haben wir einige Antworten in den FAQs zu deal.II im Abschnitt zum Debuggen zusammengestellt: https://github.com/dealii/dealii/wiki/Frequently-Asked-Questions#debugging -Dealii-Anwendungen
quelle
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
quelle
Hier eine Zusammenfassung einiger Antworten, die ich zuvor erhalten habe:
OpenMP hat Timing-Funktionen:
omp_get_wtime()
undomp_get_wtick()
- Online-DokumenteGoogle 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!
quelle