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?

gnzlbg
источник
Вам также следует заглянуть на эту страницу 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 строк кода в деле. У меня всего ~ 50 обращений к MPI. Это, конечно, намного меньше, чем пакет, такой как PETSc, но, тем не менее, это правда, что большинство кодов имеют меньше вызовов MPI, чем можно было ожидать вначале, и, следовательно, выгода от использования чего-то более высокого уровня не так велика, как может подумать с первого взгляда.

То, к чему это тогда сводится, для Вас, чтобы рассмотреть, каковы компромиссы. Сколько MPI вам нужно будет использовать и как это соотносится с дополнительными усилиями, необходимыми для создания и связи с внешней библиотекой.

Вольфганг Бангерт
источник
6

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

Тонкие абстракции в Boost.MPI позволяют легко комбинировать его с вызовами базовой библиотеки C MPI.

Я не использовал его сам и не знаю, какая из основных библиотек это делает, но я ожидаю, что это будет просто облегченная оболочка, и поэтому не стоит беспокоиться о производительности по сравнению с CAPI.

GradGuy
источник
2
Boost :: MPI - это оболочка для подмножества MPI; насколько я помню, он поддерживает только MPI 1.2, что в моих отношениях далеко от стандартов MPI-2.2 или MPI-3.
Джефф