Paralel hata ayıklama için hangi yazılımı kullanmak iyidir?


24

Şu anda herhangi bir paralel kod çalıştırmıyorum, ancak gelecekte OpenMP ve MPI hibridlerini kullanarak paralel kod çalıştırmayı tahmin ediyorum. Hata ayıklayıcılar seri projeler yürütürken benim için paha biçilmez araçlardı.

Paralel yazılımda hata ayıklamak için kullanmak isteyen herhangi biri paralel hata ayıklayıcı (veya çoklu hata ayıklayıcı) önerebilir mi? Özgür yazılım tercih edilir, ancak etkili ticari yazılımlardan bahsetmekte tereddüt etmeyin.


Buradaki yanıtların stackoverflow.com/questions/329259/… adresinden önemli ölçüde nasıl farklı olacağını anlamıyorum . Buradaki MPI, OpenMP değil zor kısımdır. Her durumda, dişli programlarda yarış koşullarında hata ayıklama şu anda çözülemez bir sınırdır.
Jeff,

ThreadSanitizer, dişli programlardaki yarış koşullarında hata ayıklamak için iyi bir çözüm olsa da, karışıma MPI eklemeye çalışan hiç kimseyi tanımıyorum!
mabraham

Yanıtlar:


17

İki büyük ticari seçimler temelde vardır dışarı şunlardır: DDT (biz de kullanmak ne Allinea dan TACC (diğer açıklamada belirtildiği gibi) ve Totalview). Kıyaslanabilir özelliklere sahipler, hem aktif olarak geliştiriliyorlar hem de doğrudan rakipler.

Eclipse, MPI ve OpenMP programlama desteği ve paralel bir hata ayıklayıcı içermesi gereken Paralel Araçlar Platformuna sahiptir .


PTP paralel hata ayıklayıcısını kullanan hiç kimseyi duymadım. Bunun ne anlama geldiğinden emin değilim ...
Jeff

Denemiş birkaç meslektaşım var, ama onunla asla oynamam.
Bill Barth

16

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.


4
Hey Coward, oyunuzu düşürürseniz, yorum yapın.
Matt Knepley

5
Aşağı oy değildi, ama bir dereceye kadar katılmıyorum. Küçük boyutlarda gösterilmeyen ölçekte birkaç hatayla karşılaştım ve paralel bir hata ayıklayıcı kullanmak onları bulmak için etkili bir yoldu. Printf ile hata ayıklama ve gdb ile bireysel işlemlere bağlanma işlemimin çoğunu yapıyorum, ancak paralel bir hata ayıklayıcısına sahip olmanın faydasını gördüm.
Bill Barth,

3
Ölçülen bir hatayla karşılaştığım tek zaman, yanlış bir kolektif iletişim algoritmasının seçilmesinden dolayı performans hatasıydı. Sonra tekrar, görüşüm Matt'inkinden çok daha uçuk, çünkü kullandığım bir hata ayıklayıcısına en yakın şey valgrind.
Jack Poulson

1
@BillBarth Daha küçük sorunlara rastlanmayan 1000 aşamada böceklerin mevcut olduğunu doğru biliyorum (Dinesh, yalnızca 82 aşamada görünen aylarca süren ünlü bir PETSc'e sahipti). Demek istediğim hüküm süren bilgeliği engellemekti. Paralel hata ayıklayıcıların ilk çare değil, son çare olduğunu düşünüyorum.
Matt Knepley

3
Sana oy verdim. Cevabınız ne istendi değil.
aterrel

5

Seri ve paralel programlar için sadece iki hata ayıklayıcı kullanıyorum:

  1. Kernighan hata ayıklayıcı, yani adli baskı ifadeleri ve dikkatli düşünme.
  2. Http://www.open-mpi.org/faq/?category=debugging#serial-debuggers adresinde açıklandığı gibi birden fazla GDB örneği .

(2) 'nin yeterince ölçeklenemez olması durumunda, (1b)' ye bakın.


1
"Kernighan debugger" ismini hiç duymadım, ama her zaman olduğu gibi hata ayıkladığımdan onaylıyorum
Jack Poulson

4

Orada Intel Parallel Studio paralel hata ayıklayıcı içerir. Daha önce hiç çalışmadım ama birkaç gösteride kullanıldığını gördüm. İşte bazı özellikleri gösteren bir video eğitimi .

Ayrıca, gdb'nin bazı durumlarda oldukça iyi çalışan birkaç ambalajı gördüm.


3

Totalview . Ticari bir hata ayıklayıcı. Her bir işlemcideki yığını görüntülemek çok kolaydır. İşlemciler / iş parçacıkları arasında değişken değerlerini görebilir (ve bunları değiştirebilirsiniz). Değişken değerlerini görselleştirmek için vektörleri veya matrisleri çizebilirsiniz. Görünüşe göre senaryo yazımı da (Tk / Tcl) sofistike gözlem noktası analizi için mümkün, ancak bununla hiç çalışmamıştım.


Sübjektif tarafta, üniversitemin HPC merkezi bunu kurduğunda, bunun fazla eksik olduğunu düşündüm. Sonra çok karmaşık hata ayıklama yapmanın ne kadar kolay olduğunu öğrendim. Gerçekten harika bir program.
Yann,

Ben de toplam görüşüm. Birçok durumda kullandım ve oldukça pahalı olmasına rağmen son derece güçlü ...
BlaB


1

Neden hiç kimsenin OP'yi tercih ettiği kadar açık kaynaklı ve özgür bir yazılım olan, ancak ticari meslektaşları kadar güçlü olmayan Padb'den (Paralel Uygulama Hata Ayıklayıcı) neden bahsetmediğini merak ediyorum , örneğin HPC için TotalView


-1

İşte bana daha önce verilen bazı cevapların özeti:

OpenMP zamanlama işlevlerine sahiptir: omp_get_wtime()ve omp_get_wtick()- çevrimiçi dokümanlar

Google’ın bir CPU profili var

Orada Scalasca OpenMP ve MPI profili ve analizini yapar

Sonra kullanmadığım Tau ve vtune var.

İyi şanslar!


Sorunun zamanlama ile ilgili olduğunu sanmıyorum ama yanılıyor olabilirim. Yine de iyi öneriler ...
Yann

Bu cevap, hata ayıklamadan ziyade profillemeyle ilgili ...
mbq

Profil oluşturma araçlarının paralel hata ayıklayıcıların yerine iyi bir alternatif çıkardığını buldum. Paralel hataların MPI'daki logjam gibi performans problemleriyle ilgili olduğunu sıklıkla buluyorum. Performans araçları genellikle bunu ortaya koyacaktır. TAU’nun hafıza profili, rastgele parça arızalarının neden olabileceğini bulmak için iyidir.
Jeff,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.