Perangkat lunak apa yang baik untuk digunakan untuk debugging paralel?

24

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.

Geoff Oxberry
sumber
Saya tidak melihat bagaimana jawaban di sini akan berbeda secara signifikan dari stackoverflow.com/questions/329259/… . MPI adalah bagian yang sulit di sini, bukan OpenMP. Bagaimanapun, kondisi lomba debugging di program berulir adalah batas yang tidak dapat dipecahkan saat ini.
Jeff
ThreadSanitizer adalah solusi yang bagus untuk debugging kondisi lomba di program berulir, meskipun saya tahu tidak ada orang yang mencoba menambahkan MPI ke dalam campuran!
mabraham

Jawaban:

17

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.

Bill Barth
sumber
Saya belum pernah mendengar ada yang menggunakan debugger paralel PTP. Saya tidak yakin apa artinya itu ...
Jeff
Saya memiliki beberapa rekan yang telah mencoba, tetapi saya tidak pernah bermain dengannya sendiri.
Bill Barth
16

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,17misalnya). 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.

Matt Knepley
sumber
4
Hai Coward, jika Anda downvote, tinggalkan komentar.
Matt Knepley
5
Saya tidak memilih, tapi saya tidak setuju sampai batas tertentu. Saya telah menemukan beberapa bug pada skala yang tidak muncul dalam ukuran kecil, dan menggunakan debugger paralel adalah cara yang efisien untuk menemukannya. Saya melakukan sebagian besar debugging saya dengan printf dan melampirkan ke proses individu dengan gdb, tetapi saya telah melihat manfaat memiliki debugger paralel.
Bill Barth
3
Satu-satunya waktu saya pernah menemukan bug pada skala adalah bug kinerja karena algoritma komunikasi kolektif yang tidak tepat dipilih. Kemudian lagi, pandangan saya bahkan lebih ekstrem daripada Matt, karena hal terdekat dengan debugger yang pernah saya gunakan adalah valgrind.
Jack Poulson
1
@ BillBarth Saya tahu Anda benar bahwa bug ada pada 1000 proses yang tidak muncul pada masalah yang lebih kecil (Dinesh memiliki PETSc yang terkenal yang berlangsung selama berbulan-bulan yang hanya muncul di 82 procs). Maksud saya lebih untuk melawan kebijaksanaan yang berlaku. Saya pikir debugger paralel adalah pilihan terakhir yang bagus, bukan pilihan pertama.
Matt Knepley
3
Saya menurunkan Anda. Jawaban Anda bukan apa yang ditanyakan.
aterrel
5

Saya hanya menggunakan dua debugger untuk program serial dan paralel:

  1. Kernighan debugger, yaitu pernyataan cetak yang bijaksana dan pemikiran yang cermat.
  2. Beberapa contoh GDB seperti dijelaskan di http://www.open-mpi.org/faq/?category=debugging#serial-debuggers .

Dalam kasus di mana (2) tidak cukup scalable, saya merujuk ke (1b).

Jeff
sumber
1
Saya belum pernah mendengar nama "Kernighan debugger", tapi saya menyetujuinya, karena saya selalu men-debug.
Jack Poulson
4

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.

pergelangan kaki
sumber
3

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.

Yann
sumber
Di sisi subjektif, ketika pusat HPC universitas saya menginstal ini saya pikir itu berlebihan. Kemudian saya menemukan betapa mudahnya melakukan debugging yang sangat rumit. Ini benar-benar program yang hebat.
Yann
Saya juga totalview kedua. Saya telah menggunakannya dalam banyak kasus dan ini sangat kuat, meskipun sangat mahal ...
BlaB
1

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

Hefnawi
sumber
-1

Berikut ringkasan dari beberapa jawaban yang diberikan kepada saya sebelumnya:

OpenMP memiliki fungsi pengaturan waktu: omp_get_wtime()dan omp_get_wtick()- dokumen online

Google memiliki profiler CPU

Ada Scalasca yang melakukan profil dan analisis OpenMP dan MPI

Lalu ada Tau dan vtune yang belum saya gunakan.

Semoga berhasil!

Mikhail
sumber
Saya tidak berpikir pertanyaannya adalah tentang waktu, tetapi saya mungkin salah. Saran yang bagus ...
Yann
Jawaban ini lebih tentang pembuatan profil daripada debugging ...
mbq
Saya telah menemukan bahwa alat profiling membuat pengganti yang bagus untuk debuggers paralel. Saya sering menemukan kasus bahwa bug paralel terkait dengan masalah kinerja, seperti logjam di MPI. Alat kinerja akan sering mengungkapkan ini. Memory profiler TAU baik untuk mencari tahu mengapa kesalahan acak dapat terjadi.
Jeff