Boost :: yüksek performanslı bilimsel uygulamalar için mpi veya C MPI?


16

MPI hakkında en sevmediğim şey veri tipleriyle (yani veri haritaları / maskeleri) uğraşmaktır, çünkü bunlar nesne yönelimli C ++ ile güzel uymuyor. boost::mpiancak web sitelerinden yalnızca MPI 1.1'i destekler:

boost :: mpi, standart İleti Geçiş Arabirimi için C ++ dostu bir arabirimdir… Boost.MPI, Boost.Serialization kitaplığını kullanarak kullanıcı tanımlı türler için MPI veri türleri oluşturabilir

boost::mpiCiddi bilimsel bilgi işlem deneyimi olan var mı? Tavsiye eder misin? Herhangi bir sorun yaşadınız mı (ölçekleme sorunları, derleyici sorunları, hatalar, uygulanmayan özellikler, bazı mpi 2.2 özelliklerine olan ihtiyaç)?

boost::mpiC ++ MPI C uygulamasını kullanmak yerine kullanmak hakkında yorum yapabilir misiniz ? Her ikisini birleştirebilir misiniz (yapabiliyorsanız boost :: mpi kullanın, başka bir yerde C-MPI)?

Kullanarak büyük bir bilimsel kod biliyor musunuz boost::mpi?


Gereksinim duyduğunuz tüm işlevlerin desteklendiğinden emin olmak için bu sayfaya boost.org/doc/libs/1_50_0/doc/html/mpi/… adresini de bakmalısınız . Bunları kendiniz uygulama olasılığı da dikkate alınmalıdır.
Alexander

1
Boost :: MPI kullanmayı düşünebilmemin en iyi nedeni otomatik olarak C ++ tiplerinin serileştirilmesini desteklemesidir. MPI C arayüzü bunu kendi başına yapamaz ve kendi serileştirmenizi başka yollarla yapmak istemiyorsanız, tüm C ++ nesneleriniz için Gönder / Recv, vb. Yoluyla geçmek için MPI veri türleri oluşturmanız gerekir.
Jeff

Elemental (libelemental.org) MPI arayüzü ( github.com/elemental/Elemental/blob/master/src/core/imports/… ) otomatik tip algılamayı zarif bir şekilde yapar. Bununla birlikte, Boost :: MPI'nin yaptığı birçok şeyi yapmaya çalışmaz.
Jeff

Yanıtlar:


13

Her zaman kendi projemizde kullanmamız gerektiğini düşünmüştüm. Bununla birlikte, yıllar boyunca öğrendiğim şey, çoğu üst düzey kodun aslında başlamak için çok fazla MPI koduna sahip olmadığıdır - söz konusu 600.000 kod satırı. II, MPI'ye yalnızca ~ 50 çağrı yapıyor. Bu kesinlikle PETSc gibi bir paketten çok daha az, ancak yine de çoğu kodun ilk başta beklenenden daha az MPI çağrısına sahip olduğu ve sonuç olarak daha yüksek bir şey kullanmanın yararı kadar büyük olmadığı doğru ilk bakışta düşünebilir.

Daha sonra bunun kaynaştığı şey, değiş tokuşların ne olduğunu düşünmenizdir. Ne kadar MPI kullanmanız gerekecek ve bu, harici bir kütüphane oluşturmak ve ona bağlanmak için gereken ek çaba ile nasıl karşılaştırılır.


6

Bildiğim kadarıyla , API etrafında boost::mpisadece bir c++sarıcı C. Bu nedenle, bazı işlevler uygulanmadığında API'yi kullanabilmeniz boost::mpive bu CAPI'ya geçebilmeniz gerekir . Gerçekten de, web sayfalarından:

Boost.MPI'deki ince soyutlamalar, onu alttaki C MPI kütüphanesine çağrılarla kolayca birleştirmeye izin verir.

Kendim kullanmadım ve büyük bir kütüphane bilmiyorum, ama sadece hafif bir sarıcı olmasını beklerdim ve bu nedenle CAPI ile karşılaştırıldığında performans konusunda endişelenmemeliyim .


2
Boost :: MPI, bir MPI alt kümesinin etrafındaki bir sargıdır; Hatırladığım kadarıyla, sadece MPI-2.2 veya MPI-3 standartlarından çok ağlayan MPI 1.2'yi destekliyor.
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.