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::mpi
obsł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::mpi
dziedzinie 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::mpi
zamiast 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
?
Odpowiedzi:
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ą.
źródło
O ile mi wiadomo,
boost::mpi
jest to tylkoc++
opakowanieC
API. W związku z tym powinieneś mieć możliwość korzystaniaboost::mpi
zC
interfejsu API i przełączania się na niego, ilekroć niektóre funkcje nie są zaimplementowane. Rzeczywiście z ich strony internetowej: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
C
API.źródło