Curmudgeon'a cevap vermeliyim. Verimliliğim yukarıdaki önerilerden herhangi biriyle asla geliştirilmedi. Paralel olarak tercih ettiğim seçeneğe göre yavaş ve pahalı: İşlem başına bir gdb oturumu. Her gdb bir MPI işlemine bağlanabilir ve bir xterm'de oturabilir (bu otomatik olarak PETSc'de olur -start_in_debugger
). Bunu mutlu bir şekilde 15 yıldır kullanıyorum. İtirazlar:
1) Global verilere bakamıyorum
MPI paylaşılan yok bir model olduğundan, küresel veri yok, yalnızca yerel veri var
2) Bu strateji birçok sürece ölçeklendirilmez
Hata da yok. Hatalar, bireysel işlemlerde olabilir, belki 1 veya 2 komşunun girişi olabilir. Gdb’yi kolayca katılan işlemlere kolayca ekleyebilirsiniz ( -debugger_nodes 0,5,17
örneğin, kullandığınız PETSc’de ). Ayrıca, yukarıdaki sistemler her işlemden geçtiklerinde çok vazgeçerler, bu da onları yavaşlatır. Gdb yöntemi aslında, çok daha ölçeklenebilir.
Gdb de çok taşınabilir. Her yerde çalışır, C ++ ve Fortran'ı anlar ve çalışma içinde rasgele kod yürütmenize izin verir. İçinde çalışırken kolayca verileri görüntülemek için özel fonksiyonlar yazdım.