Boost :: mpi oder C MPI für wissenschaftliche Hochleistungsanwendungen?

16

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::mpiunterstü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::mpiseriö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::mpianstelle 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?

gnzlbg
quelle
Sie sollten sich auch diese Seite boost.org/doc/libs/1_50_0/doc/html/mpi/… ansehen , um sicherzustellen, dass alle von Ihnen benötigten Funktionen unterstützt werden. Die Möglichkeit, sie selbst umzusetzen, sollte ebenfalls erwogen werden.
Alexander
1
Der beste Grund für die Verwendung von Boost :: MPI ist, dass es die automatische Serialisierung von C ++ - Typen unterstützt. Die MPI C-Schnittstelle kann dies nicht alleine tun, und Sie müssten MPI-Datentypen für alle Ihre C ++ - Objekte erstellen, um sie über Send / Recv usw. weiterzuleiten, es sei denn, Sie möchten Ihre eigene Serialisierung auf andere Weise durchführen.
Jeff
Die MPI-Benutzeroberfläche von Elemental (libelemental.org) ( github.com/elemental/Elemental/blob/master/src/core/imports/… ) führt auf elegante Weise eine automatische Typenerkennung durch . Es wird jedoch nicht versucht, viele der Aufgaben von Boost :: MPI auszuführen.
Jeff

Antworten:

13

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.

Wolfgang Bangerth
quelle
6

Soweit ich weiß, boost::mpihandelt es sich nur um einen c++Wrapper um die CAPI. Daher sollten Sie in der Lage sein, boost::mpidie CAPI zu verwenden und zu wechseln, wenn einige Funktionen nicht implementiert sind. In der Tat von ihrer Webseite:

Die schlanken Abstraktionen in Boost.MPI ermöglichen eine einfache Kombination mit Aufrufen der zugrunde liegenden C MPI-Bibliothek.

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 CAPI machen sollte.

GradGuy
quelle
2
Boost :: MPI ist ein Wrapper um eine Teilmenge von MPI. Soweit ich mich erinnere, unterstützt es nur MPI 1.2, was in meinen Augen weit von den Standards MPI-2.2 oder MPI-3 entfernt ist.
Jeff