Boost :: mpi або C MPI для наукових застосувань високої продуктивності?


16

Те, що мені найбільше не подобається у MPI, - це мати типи даних (тобто карти даних / маски), оскільки вони не так добре вписуються в об'єктно-орієнтований C ++. boost::mpiпроте підтримує лише MPI 1.1 зі свого веб-сайту:

boost :: mpi - інтерфейс C ++ для стандартного інтерфейсу передачі повідомлень… Boost.MPI може створювати типи даних MPI для визначених користувачем типів за допомогою бібліотеки Boost.Serialization

Хтось мав досвід роботи з boost::mpiсерйозними науковими обчисленнями? Чи рекомендуєте ви це? Чи були у вас проблеми (проблеми зі масштабуванням, проблеми компілятора, помилки, не реалізовані функції, необхідність деяких функцій mpi 2.2)?

Чи можете ви прокоментувати використання boost::mpiзамість використання MPI C з C ++? Чи можете ви комбінувати обидва (використовуйте boost :: mpi, коли зможете, C-MPI в іншому місці)?

Чи знаєте ви якийсь великий науковий код, що використовує boost::mpi?


Ви також повинні переглянути цю сторінку boost.org/doc/libs/1_50_0/doc/html/mpi/… , щоб переконатися, що всі необхідні вам функції підтримуються. Можливо також розглянути можливість їх здійснення.
Олександр

1
Найкраща причина, з якою я можу подумати використовувати Boost :: MPI - це те, що він автоматично підтримує серіалізацію типів C ++. Інтерфейс MPI C не може це зробити самостійно, і вам доведеться створити типи даних MPI для всіх ваших об'єктів C ++, щоб передати їх через Send / Recv тощо, якщо ви не хочете зробити власну серіалізацію якимись іншими способами.
Джефф

Інтерфейс MPI Elemental (libelemental.org) ( github.com/elemental/Elemental/blob/master/src/core/imports/… ) робить елегантне автоматичне визначення типу. Однак він не намагається зробити багато речей, які робить Boost :: MPI.
Джефф

Відповіді:


13

Я завжди думав, що ми повинні використовувати його у власному проекті, deal.II, тому що це вищий рівень, ніж чистий MPI, і може зберегти кілька рядків коду тут і там. З цього приводу я дізнався, що більшість кодів високого рівня насправді не має так багато MPI-коду для початку - 600 000 рядків коду у deal.II мають лише ~ 50 дзвінків у MPI. Це, безумовно, набагато менше, ніж такий пакет, як PETSc, але я думаю, що все-таки вірно, що більшість кодів мають меншу кількість дзвінків у форматі MPI, ніж можна було б спочатку очікувати, і, отже, вигода від використання чогось вищого рівня не така велика, як один може подумати на перший погляд.

Тоді це зводиться до вас, щоб ви розглядали, які вигоди є. Скільки MPI вам потрібно буде використовувати, і як це порівняти з додатковими зусиллями, необхідними для створення та зв’язку із зовнішньою бібліотекою.


6

Наскільки я знаю, boost::mpiце лише c++обгортка навколо CAPI. Таким чином, ви повинні мати можливість використовувати boost::mpiта переходити на CAPI, коли якась функціональність не реалізована. Дійсно, з їх веб-сторінки:

Тонкі абстракції в Boost.MPI дозволяють легко комбінувати його з дзвінками до основної бібліотеки MP MP.

Я сам не користувався цим і не знаю про велику бібліотеку, яка це робить, але я б очікував, що це просто легка обгортка, і як така не слід турбуватися про продуктивність порівняно з CAPI.


2
Boost :: MPI - обгортка навколо підмножини MPI; наскільки я пам’ятаю, він підтримує лише MPI 1.2, що, на мій погляд, далеко не стандарт MPI-2.2 або MPI-3.
Джефф
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.