Больше всего в 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
?
Ответы:
Я всегда думал, что мы должны использовать его в нашем собственном проекте, deal.II, потому что это более высокий уровень, чем чистый MPI, и он может сохранить несколько строк кода здесь и там. Тем не менее, за эти годы я узнал, что у большинства высокоуровневого кода на самом деле нет такого большого количества MPI-кода - 600 000 строк кода в деле. У меня всего ~ 50 обращений к MPI. Это, конечно, намного меньше, чем пакет, такой как PETSc, но, тем не менее, это правда, что большинство кодов имеют меньше вызовов MPI, чем можно было ожидать вначале, и, следовательно, выгода от использования чего-то более высокого уровня не так велика, как может подумать с первого взгляда.
То, к чему это тогда сводится, для Вас, чтобы рассмотреть, каковы компромиссы. Сколько MPI вам нужно будет использовать и как это соотносится с дополнительными усилиями, необходимыми для создания и связи с внешней библиотекой.
источник
Насколько я знаю,
boost::mpi
это простоc++
оболочка вокругC
API. Таким образом, вы должны иметь возможность использоватьboost::mpi
и переключаться наC
API всякий раз, когда некоторые функции не реализованы. Действительно, с их веб-страницы:Я не использовал его сам и не знаю, какая из основных библиотек это делает, но я ожидаю, что это будет просто облегченная оболочка, и поэтому не стоит беспокоиться о производительности по сравнению с
C
API.источник