W tej chwili nie uruchamiam żadnego kodu równoległego, ale spodziewam się, że w przyszłości będę używać kodu równoległego, używając hybryd OpenMP i MPI. Debugery były dla mnie nieocenionym narzędziem podczas uruchamiania projektów seryjnych.
Czy ktoś może polecić debuger równoległy (lub wiele debuggerów) do debugowania oprogramowania równoległego? Wolne oprogramowanie byłoby preferowane, ale nie wahaj się wspomnieć o skutecznym oprogramowaniu komercyjnym.
software
parallel-computing
Geoff Oxberry
źródło
źródło
Odpowiedzi:
Istnieją zasadniczo dwa główne, komercyjne wybory: DDT od Allinea (którego używamy w TACC ) i Totalview (jak wspomniano w innym komentarzu). Mają porównywalne funkcje, są aktywnie rozwijane i są bezpośrednimi konkurentami.
Eclipse ma platformę narzędzi równoległych , która powinna obejmować obsługę programowania MPI i OpenMP oraz równoległego debuggera.
źródło
Muszę dać curmudgeon odpowiedź. Żadna z powyższych sugestii nigdy nie poprawiła mojej wydajności. Są one wolne i kosztowne w porównaniu z moją preferowaną opcją równoległą: jedna sesja gdb na proces. Każdy gdb może połączyć się z procesem MPI i siedzieć w xterm (dzieje się to automatycznie przy użyciu PETSc
-start_in_debugger
). Z tego korzystam od 15 lat. Zastrzeżenia:1) Nie mogę patrzeć na dane globalne
Ponieważ MPI jest modelem współdzielonym, żaden nie ma danych globalnych, tylko dane lokalne
2) Ta strategia nie jest skalowana do wielu procesów
Nie rób też błędów. Błędy występują w poszczególnych procesach, być może z udziałem 1 lub 2 sąsiadów. Możesz łatwo spawnować gdb tylko w procesach uczestniczących (
-debugger_nodes 0,5,17
na przykład w PETSc ). Ponadto powyższe systemy dużo się poddają, gdy są uruchamiane przy każdym procesie, co czyni je powolnymi. Metoda gdb jest w rzeczywistości znacznie bardziej skalowalna.gdb jest również bardzo przenośny. Działa wszędzie, rozumie C ++ i Fortran i pozwala na wykonanie dowolnego kodu w trakcie uruchomienia. Napisałem specjalne funkcje, aby łatwo wyświetlać dane podczas ich uruchamiania.
źródło
Używam tylko dwóch debuggerów dla programów szeregowych i równoległych:
W przypadku, gdy (2) nie jest wystarczająco skalowalny, odsyłam do (1b).
źródło
Istnieje Intel Parallel Studio, który zawiera równoległy debugger. Nigdy z tym nie pracowałem, ale widziałem, że był używany w kilku demach. Oto samouczek wideo, który pokazuje niektóre funkcje.
Widziałem także kilka opakowań wokół gdb, które działały dość dobrze w niektórych przypadkach.
źródło
Totalview . To komercyjny debugger. Widok stosu na każdym procesorze jest bardzo łatwy. Możesz zobaczyć wartości zmiennych (i zmienić je) w procesorach / wątkach. Możesz rysować wektory lub matracie, aby wizualizować wartości zmiennych. Najwyraźniej możliwe jest także pisanie skryptów (Tk / Tcl) w celu wyrafinowanej analizy punktu obserwacyjnego, chociaż sam nigdy z tym nie pracowałem.
źródło
Aby uzyskać kilka prostych sposobów debugowania kodów równoległych, zebraliśmy kilka odpowiedzi w umowie. II FAQ w sekcji dotyczącej debugowania: https://github.com/dealii/dealii/wiki/Frequently-Asked-Questions#debugging -dealii-aplikacje
źródło
Zastanawiam się, dlaczego nikt nie wspominał o Padb (Parallel Application Debugger), który jest open source i wolnym oprogramowaniem, jak preferuje OP, ale nie tak potężny, jak komercyjne odpowiedniki, na przykład: TotalView dla HPC
źródło
Oto podsumowanie niektórych wcześniej udzielonych odpowiedzi:
OpenMP ma funkcje pomiaru czasu:
omp_get_wtime()
orazomp_get_wtick()
- dokumenty onlineGoogle ma profiler procesora
Jest Scalasca, który wykonuje profile i analizy OpenMP i MPI
Potem jest Tau i Vtune, których nie użyłem.
Powodzenia!
źródło