Boost :: mpi atau C MPI untuk aplikasi ilmiah kinerja tinggi?

16

Hal yang saya paling tidak suka tentang MPI adalah berurusan dengan tipe data (yaitu peta data / topeng) karena mereka tidak cocok dengan C + berorientasi objek. boost::mpiNamun, hanya mendukung MPI 1.1 dari situs web mereka:

boost :: mpi adalah antarmuka ramah C ++ ke Antarmuka Lulus Pesan standar ... Boost.MPI dapat membangun tipe data MPI untuk jenis yang ditentukan pengguna menggunakan perpustakaan Boost.Serialization

Adakah yang punya pengalaman dengan boost::mpikomputasi ilmiah serius? Apakah Anda merekomendasikannya? Apakah Anda memiliki masalah (masalah penskalaan, masalah kompiler, kesalahan, fitur yang tidak diimplementasikan, kebutuhan akan beberapa fitur mpi 2.2)?

Bisakah Anda mengomentari menggunakan boost::mpialih-alih menggunakan implementasi MPI C dari C ++? Bisakah Anda menggabungkan keduanya (gunakan boost :: mpi saat Anda bisa, C-MPI di tempat lain)?

Apakah Anda tahu ada kode ilmiah besar yang digunakan boost::mpi?

gnzlbg
sumber
Anda juga harus melihat halaman ini boost.org/doc/libs/1_50_0/doc/html/mpi/… untuk memastikan bahwa semua fungsi yang Anda butuhkan didukung. Kemungkinan untuk menerapkannya sendiri juga harus dipertimbangkan.
Alexander
1
Alasan terbaik yang dapat saya pikirkan untuk menggunakan Boost :: MPI adalah bahwa ia mendukung serialisasi tipe C ++ secara otomatis. Antarmuka MPI C tidak dapat melakukan ini sendiri dan Anda harus membuat tipe data MPI untuk semua objek C ++ Anda untuk meneruskannya melalui Send / Recv, dll., Kecuali jika Anda ingin melakukan serialisasi sendiri dengan beberapa cara lain.
Jeff
Antarmuka MPI Elemental (libelemental.org) ( github.com/elemental/Elemental/blob/master/src/core/import/… ) melakukan pendeteksian tipe otomatis dengan cara yang elegan. Namun, itu tidak berusaha melakukan banyak hal yang Boost :: MPI lakukan.
Jeff

Jawaban:

13

Saya selalu berpikir bahwa kita harus menggunakannya dalam proyek kita sendiri, kesepakatan.II, karena ini lebih tinggi daripada MPI murni dan dapat menyimpan beberapa baris kode di sana-sini. Yang mengatakan, apa yang saya pelajari selama bertahun-tahun adalah bahwa sebagian besar kode tingkat tinggi sebenarnya tidak memiliki banyak kode MPI untuk memulai - 600.000 baris kode dalam kesepakatan. Saya hanya punya ~ 50 panggilan ke MPI. Itu tentu saja jauh lebih sedikit daripada paket seperti PETSc, tapi saya pikir itu benar bahwa sebagian besar kode memiliki lebih sedikit panggilan MPI daripada yang diharapkan pada awalnya dan bahwa, akibatnya, manfaat menggunakan sesuatu yang tingkatannya lebih tinggi tidak sebesar satu mungkin berpikir sekilas.

Apa yang kemudian menjadi intinya adalah agar Anda mempertimbangkan apa kompromi itu. Berapa banyak MPI yang perlu Anda gunakan, dan bagaimana hal itu dibandingkan dengan upaya tambahan yang diperlukan untuk membangun dan menghubungkan dengan perpustakaan eksternal.

Wolfgang Bangerth
sumber
6

Sejauh yang saya tahu, boost::mpihanyalah c++pembungkus CAPI. Dengan demikian, Anda harus dapat menggunakan boost::mpidan beralih ke CAPI setiap kali beberapa fungsi tidak diterapkan. Memang, dari halaman web mereka:

Abstraksi tipis di Boost.MPI memungkinkan seseorang untuk dengan mudah menggabungkannya dengan panggilan ke pustaka C MPI yang mendasarinya.

Saya belum menggunakannya sendiri, dan tidak tahu perpustakaan utama yang melakukannya, tapi saya berharap itu hanya menjadi pembungkus yang ringan dan karena itu tidak perlu khawatir tentang kinerja dibandingkan dengan CAPI.

GradGuy
sumber
2
Boost :: MPI adalah pembungkus subset MPI; seingat saya, ini hanya mendukung MPI 1.2, yang jauh dari standar MPI-2.2 atau MPI-3 dalam hal saya.
Jeff