Boost :: MPI lub C MPI dla wysokowydajnych aplikacji naukowych?

16

Rzeczą, której najbardziej nie lubię w MPI, jest zajmowanie się typami danych (tj. Mapami / maskami danych), ponieważ nie pasują one tak dobrze do obiektowo zorientowanego C ++. boost::mpiobsługuje jednak tylko MPI 1.1 z ich strony internetowej:

boost :: mpi to przyjazny interfejs C ++ do standardowego interfejsu przekazywania wiadomości… Boost.MPI może budować typy danych MPI dla typów zdefiniowanych przez użytkownika za pomocą biblioteki Boost.Serialization

Czy ktoś miał jakieś doświadczenie w boost::mpidziedzinie poważnego informatyki naukowej? Poleciłbyś to? Czy masz jakieś problemy (problemy ze skalowaniem, problemy z kompilatorem, błędy, niezaimplementowane funkcje, potrzeba niektórych funkcji MPI 2.2)?

Czy możesz skomentować używanie boost::mpizamiast implementacji MPI C z C ++? Czy możesz połączyć oba te elementy (użyj boost :: mpi, jeśli możesz, C-MPI w innym miejscu)?

Czy znasz duży kod naukowy boost::mpi?

gnzlbg
źródło
Powinieneś także spojrzeć na tę stronę boost.org/doc/libs/1_50_0/doc/html/mpi/… , aby mieć pewność, że wszystkie potrzebne funkcje są obsługiwane. Należy również wziąć pod uwagę możliwość ich samodzielnego wdrożenia.
Alexander
1
Najlepszym powodem, dla którego mogę wymyślić użycie Boost :: MPI, jest to, że automatycznie obsługuje serializację typów C ++. Interfejs MPI C nie może tego zrobić samodzielnie i musisz utworzyć typy danych MPI dla wszystkich swoich obiektów C ++ w celu przekazania ich przez Send / Recv itp., Chyba że chcesz wykonać własną serializację w inny sposób.
Jeff
Interfejs MPI Elemental (libelemental.org) ( github.com/elemental/Elemental/blob/master/src/core/imports/… ) wykonuje automatyczne wykrywanie typów w elegancki sposób. Jednak nie próbuje robić wielu rzeczy, które robi Boost :: MPI.
Jeff

Odpowiedzi:

13

Zawsze myślałem, że powinniśmy używać go w naszym projekcie, deal.II, ponieważ jest to wyższy poziom niż czysty MPI i można zapisać tu i tam kilka linii kodu. To powiedziawszy, nauczyłem się przez te lata, że ​​większość kodu wysokiego poziomu nie ma tak wiele kodu MPI na początek - 600 000 linii kodu w ofercie. Mam tylko ~ 50 wywołań do MPI. To z pewnością znacznie mniej niż pakiet taki jak PETSc, ale myślę, że to prawda, że ​​większość kodów ma mniej wywołań MPI, niż można by się początkowo spodziewać, i że w konsekwencji korzyść z używania czegoś na wyższym poziomie nie jest tak duża jak jeden może myśleć na pierwszy rzut oka.

Sprowadza się to do rozważenia kompromisów. Ile MPI będziesz potrzebować i jak to porównać do dodatkowego wysiłku wymaganego do zbudowania i połączenia z biblioteką zewnętrzną.

Wolfgang Bangerth
źródło
6

O ile mi wiadomo, boost::mpijest to tylko c++opakowanie CAPI. W związku z tym powinieneś mieć możliwość korzystania boost::mpiz Cinterfejsu API i przełączania się na niego, ilekroć niektóre funkcje nie są zaimplementowane. Rzeczywiście z ich strony internetowej:

Cienkie abstrakty w Boost.MPI pozwalają łatwo łączyć je z wywołaniami do podstawowej biblioteki C MPI.

Nie korzystałem z niego osobiście i nie znam dużej biblioteki, która to robi, ale spodziewam się, że będzie to tylko lekkie opakowanie i jako takie nie powinno się martwić o wydajność w porównaniu z CAPI.

GradGuy
źródło
2
Boost :: MPI jest opakowaniem wokół podzbioru MPI; o ile pamiętam, obsługuje tylko MPI 1.2, co pod wieloma względami jest dalekie od standardów MPI-2.2 lub MPI-3.
Jeff