Was ich an MPI am wenigsten mag, ist der Umgang mit Datentypen (dh Datenmaps / Masken), weil sie nicht so gut zu objektorientiertem C ++ passen. boost::mpi
unterstützt jedoch nur MPI 1.1 von ihrer Website:
boost :: mpi ist eine C ++ - freundliche Schnittstelle zur Standardschnittstelle für die Nachrichtenübermittlung. Boost.MPI kann mithilfe der Boost.Serialization-Bibliothek MPI-Datentypen für benutzerdefinierte Typen erstellen
Hat jemand Erfahrung mit boost::mpi
seriösem wissenschaftlichen Rechnen? Würdest du es weiterempfehlen? Hatten Sie Probleme (Skalierungsprobleme, Compilerprobleme, Fehler, nicht implementierte Funktionen, Bedarf an einigen MPI 2.2-Funktionen)?
Können Sie die Verwendung boost::mpi
anstelle der Verwendung der MPI C-Implementierung aus C ++ kommentieren ? Können Sie beide kombinieren (verwenden Sie boost :: mpi, wenn Sie können, C-MPI woanders)?
Kennen Sie einen großen wissenschaftlichen Code, der verwendet boost::mpi
?
Antworten:
Ich habe immer gedacht, dass wir es in unserem eigenen Projekt verwenden sollten, deal.II, weil es höher ist als reines MPI und hier und da ein paar Codezeilen sparen kann. Im Laufe der Jahre habe ich jedoch gelernt, dass die meisten High-Level-Codes zunächst nicht so viel MPI-Code enthalten - die 600.000 Codezeilen im Deal. Ich habe nur ~ 50 Anrufe bei MPI. Das ist sicherlich viel weniger als ein Paket wie PETSc, aber ich denke, es stimmt trotzdem, dass die meisten Codes weniger MPI-Aufrufe haben, als man zunächst erwarten würde, und dass folglich der Vorteil, etwas zu verwenden, das höher ist, nicht so groß ist wie einer kann auf den ersten Blick denken.
Worauf es dann ankommt, ist, dass Sie sich überlegen, was die Kompromisse sind. Wie viel MPI müssen Sie verwenden, und wie ist das im Vergleich zu dem zusätzlichen Aufwand, der zum Erstellen und Verknüpfen mit einer externen Bibliothek erforderlich ist.
quelle
Soweit ich weiß,
boost::mpi
handelt es sich nur um einenc++
Wrapper um dieC
API. Daher sollten Sie in der Lage sein,boost::mpi
dieC
API zu verwenden und zu wechseln, wenn einige Funktionen nicht implementiert sind. In der Tat von ihrer Webseite:Ich habe es nicht selbst verwendet und kenne keine große Bibliothek, die dies tut, aber ich würde erwarten, dass es nur ein leichtgewichtiger Wrapper ist und man sich daher keine Gedanken über die Leistung im Vergleich zur
C
API machen sollte.quelle