Saya tidak menjalankan kode paralel apa pun sekarang, tapi saya mengantisipasi menjalankan kode paralel di masa depan menggunakan hibrida OpenMP dan MPI. Debugger adalah alat yang sangat berharga bagi saya ketika menjalankan proyek seri.
Adakah yang bisa merekomendasikan debugger paralel (atau beberapa debugger) untuk digunakan untuk debugging perangkat lunak paralel? Perangkat lunak bebas lebih disukai, tetapi jangan ragu untuk menyebutkan perangkat lunak komersial yang efektif.
software
parallel-computing
Geoff Oxberry
sumber
sumber
Jawaban:
Pada dasarnya ada dua pilihan komersial utama di luar sana: DDT dari Allinea (yang kami gunakan di TACC ) dan Totalview (sebagaimana disebutkan dalam komentar lainnya). Mereka memiliki fitur yang sebanding, keduanya dikembangkan secara aktif, dan merupakan pesaing langsung.
Eclipse memiliki Platform Alat Paralel , yang harus mencakup dukungan pemrograman MPI dan OpenMP dan debugger paralel.
sumber
Saya harus memberikan jawaban kurmudgeon. Produktivitas saya belum pernah ditingkatkan oleh salah satu saran di atas. Mereka lambat dan mahal dibandingkan dengan pilihan pilihan saya secara paralel: satu sesi GBB per proses. Setiap gdb dapat terhubung ke proses MPI dan duduk dalam xterm (ini terjadi secara otomatis dalam penggunaan PETSc
-start_in_debugger
). Saya telah menggunakan ini selama 15 tahun, dengan senang hati. Keberatan:1) Saya tidak bisa melihat data global
Karena MPI adalah model shared-none, tidak ada data global, hanya data lokal
2) Strategi ini tidak skala untuk banyak proses
Tidak melakukan bug. Bug terjadi pada proses individu, mungkin dengan masukan dari 1 atau 2 tetangga. ANDA dapat dengan mudah menelurkan gdb hanya pada proses yang berpartisipasi (dalam PETSc yang Anda gunakan
-debugger_nodes 0,5,17
misalnya). Juga, sistem di atas banyak menyerah ketika dijalankan pada setiap proses, yang membuatnya lambat. Metode gdb sebenarnya lebih scalable.gdb juga sangat portabel. Ini berjalan di mana-mana, memahami C ++ dan Fortran, dan memungkinkan Anda untuk mengeksekusi kode arbitrer di dalam proses. Saya telah menulis fungsi khusus untuk dengan mudah menampilkan data saat berjalan di dalamnya.
sumber
Saya hanya menggunakan dua debugger untuk program serial dan paralel:
Dalam kasus di mana (2) tidak cukup scalable, saya merujuk ke (1b).
sumber
Ada Intel Parallel Studio yang mencakup debugger paralel. Saya tidak pernah bekerja dengannya tetapi saya pernah melihatnya digunakan dalam beberapa demo. Berikut tutorial video yang menunjukkan beberapa fitur.
Saya juga melihat beberapa bungkus di sekitar gdb yang bekerja cukup baik dalam kasus-kasus tertentu.
sumber
Totalview . Ini adalah debugger komersial. Sangat mudah untuk melihat tumpukan pada setiap prosesor. Anda dapat melihat nilai variabel (dan mengubahnya) di seluruh prosesor / utas. Anda bisa menggambar vektor atau matriks untuk memvisualisasikan nilai variabel. Tampaknya scripting juga dimungkinkan (Tk / Tcl), untuk analisis titik tontonan yang canggih, meskipun saya belum pernah bekerja dengan ini sendiri.
sumber
Untuk beberapa cara sederhana untuk men-debug kode paralel, kami telah mengumpulkan beberapa jawaban dalam kesepakatan tersebut. II FAQ di bagian debugging: https://github.com/dealii/dealii/wiki/Frequently-Asked-Questions#debugging -dealii-aplikasi
sumber
Saya bertanya-tanya mengapa tidak ada yang menyebutkan Padb (Debugger Aplikasi Paralel) yang merupakan open source dan perangkat lunak bebas seperti OP lebih suka, tetapi tidak sekuat rekan-rekan komersial misalnya: TotalView untuk HPC
sumber
Berikut ringkasan dari beberapa jawaban yang diberikan kepada saya sebelumnya:
OpenMP memiliki fungsi pengaturan waktu:
omp_get_wtime()
danomp_get_wtick()
- dokumen onlineGoogle memiliki profiler CPU
Ada Scalasca yang melakukan profil dan analisis OpenMP dan MPI
Lalu ada Tau dan vtune yang belum saya gunakan.
Semoga berhasil!
sumber