2010-03-11 4 views
95

Kann jemand die Unterschiede zwischen den OpenMPI- und MPICH-Implementierungen von MPI erklären? Welche der beiden ist eine bessere Implementierung?MPICH vs OpenMPI

+1

Siehe hierzu: http://stackoverflow.com/questions/144309/what-is-the-best-mpi-implementation –

+2

Wir haben OpenMPI als unsere MPI-Implementierung gewählt. Für uns wurde ein besseres Benchmarking durchgeführt, und Portabilität war nicht so sehr ein Thema. Siehe den Frage-Link, den Taylor L veröffentlicht hat. – Xorlev

+0

Sie können auch in Betracht ziehen, dass in [Google Trends] (https://trends.google.com/trends/explore?q=openmpi,MPICH2,mpich,%2Fm%2F03z8q2,%2Fm%2F07yb2g) OpenMPI 2-3 mal ist mehr gesucht als MPICH/MPICH2. – Foad

Antwort

11

Wenn Sie Entwicklung statt Produktionssystem, gehen Sie mit MPICH. MPICH hat eingebauten Debugger, während Open-MPI nicht das letzte Mal überprüft habe.

In der Produktion wird Open-MPI höchstwahrscheinlich schneller sein. Aber dann möchten Sie möglicherweise andere Alternativen wie Intel MPI untersuchen.

+1

Danke für den Tipp !! – lava

+2

Ich bin nicht sicher, was Sie mit integriertem Debugger meinen, aber ich finde, dass Open-MPI eine gute Integration mit z. gdb: https://www.open-mpi.org/faq/?category=debugging. – Jeff

+0

Gibt es zur Produktion Überlegungen, MPICH mit TAO zu verwenden? – namu

10

Ich stimme dem vorherigen Plakat zu. Probieren Sie beide aus, um zu sehen, auf welcher Anwendung Ihre Anwendung schneller läuft, und verwenden Sie sie dann für die Produktion. Sie sind beide standardkonform. Wenn es Ihr Desktop ist, ist entweder in Ordnung. OpenMPI kommt auf Macbooks aus der Box, und MPICH scheint mehr Linux/Valgrind freundlich zu sein. Es ist zwischen dir und deiner Toolchain.

Wenn es sich um einen Produktionscluster handelt, müssen Sie ein umfassenderes Benchmarking durchführen, um sicherzustellen, dass es für Ihre Netzwerktopologie optimiert ist. Die Konfiguration auf einem Produktionscluster ist der Hauptunterschied in Bezug auf Ihre Zeit, da Sie RTFM verwenden müssen.

+11

Wenn jeder RTFMed, würden wir StackOverflow nicht brauchen :-) – Jeff

+1

FWIW, Open-MPI hat einen FAQ-Eintrag zu Valgrind-Sauberkeit: https://www.open-mpi.org/faq/?category=debugging#valgrind_clean – Jeff

+0

@ Jeff Ähm, was ist mit Käfern? Veraltete Dokumente? Das ist hinter einer Vielzahl meiner (hunderte von ..) Fragen hier;) – javadba

6

Beide sind standardkonform, so dass es egal ist, was Sie aus Gründen der Korrektheit verwenden. Sofern Sie nicht über einige Features, z. B. bestimmte Debug-Erweiterungen, verfügen, benchmarken Sie beide, und wählen Sie je nachdem, was für Ihre Apps auf Ihrer Hardware schneller ist. Bedenken Sie auch, dass es andere MPI-Implementierungen gibt, die eine bessere Leistung oder Kompatibilität bieten, wie MVAPICH (kann die beste InfiniBand-Leistung haben) oder Intel MPI (weit verbreitete ISVs). HP hart daran gearbeitet, auch mit vielen ISV-Codes ihre MPI qualifiziert zu bekommen, aber ich bin nicht sicher, wie es ergeht nach dem Einschalten zu Plattform verkauft ...

105

Zweck

Erstens ist es wichtig zu erkennen, wie MPICH und Open-MPI unterschiedlich sind, dh dass sie auf unterschiedliche Bedürfnisse zugeschnitten sind. MPICH soll eine qualitativ hochwertige Referenzimplementierung des neuesten MPI-Standards und die Grundlage für abgeleitete Implementierungen sein, um spezielle Anforderungen zu erfüllen. OpenMPI zielt sowohl in Bezug auf die Nutzung als auch auf die Netzwerk-Conduits auf den üblichen Fall ab.

Unterstützung für Netzwerktechnik

Open MPI dokumentiert ihre Netzwerk-Unterstützung here. MPICH listet diese Information in der README auf, die mit jeder Version verteilt ist (z. B. this ist für 3.2.1). Beachten Sie, dass Open-MPI und MPICH die Netzwerkebene OFI (alias libfabric) unterstützen und daher viele der gleichen Netzwerke unterstützen. Libfabric ist jedoch eine facettenreiche API, weshalb nicht jedes Netzwerk in beiden gleich unterstützt wird (z. B. MPICH hat eine OFI-basierte IBM Blue Gene/Q-Implementierung, mir ist jedoch keine entsprechende Unterstützung in Open-MPI bekannt). . die OFI-basierten Implementierungen sowohl MPICH und Open-MPI arbeiten an Shared-Memory, Ethernet (über TCP/IP), Mellanox InfiniBand, Intel Omni Path, und wahrscheinlich andere Netze jedoch. Open-MPI unterstützt auch beide Netzwerke und andere nativ (d. H. Ohne OFI in der Mitte).

In der Vergangenheit eine gemeinsame Beschwerde über MPICH ist, dass es nicht InfiniBand unterstützt, während Open MPI tut. MVAPICH und Intel MPI (unter anderem) jedoch - von denen beide MPICH Derivate sind - Unterstützung InfiniBand, also, wenn man bereit ist, MPICH als „MPICH und seine Derivate“ zu definieren, dann MPICH hat extrem breite Netzwerk-Unterstützung, einschließlich InfiniBand und proprietären Verbindungen wie Cray Seastar, Gemini und Widder sowie IBM Blue Gene (/ L,/P und/Q). Open-MPI unterstützt auch Cray Gemini, aber es ist nicht nicht von Cray unterstützt. In jüngerer Zeit unterstützte MPICH InfiniBand über ein Netmod (jetzt veraltet), aber MVAPICH2 hat umfangreiche Optimierungen, die es in fast allen Fällen zur bevorzugten Implementierung machen.

Unterstützung für Funktionen aus der neusten MPI Standard-

Einer orthogonalen Achse zu Hardware/Plattform-Unterstützung ist Abdeckung des Standard MPI. Hier ist MPICH meist weit überlegen. MPICH war die erste Implementierung jeder einzelnen Version des MPI-Standards, von MPI-1 bis MPI-3. OpenMPI hat erst kürzlich MPI-3 unterstützt und ich finde, dass einige MPI-3-Funktionen auf einigen Plattformen fehlerhaft sind.

Historisch gesehen hatte OpenMPI keine ganzheitliche Unterstützung für MPI_THREAD_MULTIPLE, die für einige Anwendungen kritisch ist. Es wird möglicherweise auf einigen Plattformen unterstützt, es kann jedoch nicht davon ausgegangen werden, dass es funktioniert. Auf der anderen Seite hat MPICH seit vielen Jahren ganzheitliche Unterstützung für MPI_THREAD_MULTIPLE.

Ein weiteres Merkmal, das in Open-MPI 1.x gebrochen wurde, war einseitige Kommunikation, auch bekannt als RMA. Dies wurde in letzter Zeit behoben und ich finde, als ein sehr starker Benutzer dieser Features, dass sie im Allgemeinen in Open-MPI 3.x gut funktionieren (siehe zum Beispiel die ARMCI-MPI test matrix in Travis CI für Ergebnisse, die zeigen, dass RMA mit beiden Implementierungen arbeitet, zumindest in geteilt -Speicher. ich habe auf Intel Omni Pfad ähnlich positive Ergebnisse gesehen, aber nicht getestet Mellanox InfiniBand.

Process Management

Ein Bereich, wo Open MPI verwendet deutlich überlegen sein war der Prozess-Manager. der alte MPICH Launch (MPD) war spröde und schwer zu bedienen.Glücklicherweise ist es seit vielen Jahren veraltet (siehe die MPICH FAQ entry für Details). So Kritik an MPICH, weil MPD falsch ist.

Der Hydra-Prozessmanager ist ziemlich gut und hat die ähnliche Verwendbarkeit und Funktionsmenge wie ORTE (in Open-MPI), z.B. Beide unterstützen HWLOC zur Steuerung der Prozesstopologie.

Ich habe herausgefunden, dass Open-MPI robuster sein kann, wenn MacOS mit einem VPN verwendet wird, d. H. MPICH kann aufgrund von Problemen mit der Auflösung des Hostnamens im Start hängen. Da dies ein Fehler ist, kann dieses Problem in Zukunft verschwinden.

Plattformspezifische Vergleich

Hier ist meine Bewertung auf einer Plattform-by-Plattform Basis:

  • Mac OS: sowohl Open MPI und MPICH sollte gut funktionieren. Um die neuesten Funktionen des MPI-3-Standards zu erhalten, müssen Sie eine aktuelle Version von Open-MPI verwenden, die von Homebrew erhältlich ist. Es gibt keinen Grund, über MPI-Leistung nachzudenken, wenn Sie auf einem Mac-Laptop laufen.

  • Linux mit Shared-Memory: Open-MPI und MPICH sollte gut funktionieren. Wenn Sie eine Release-Version haben möchten, die alle MPI-3 oder MPI_THREAD_MULTIPLE unterstützt, benötigen Sie wahrscheinlich MPICH, es sei denn, Sie erstellen Open-MPI selbst, weil z. Ubuntu 16.04 bietet nur die alte Version 1.10 via APT. Mir sind keine wesentlichen Leistungsunterschiede zwischen den beiden Implementierungen bekannt. Beide unterstützen Single-Copy-Optimierungen, wenn das Betriebssystem dies zulässt.

  • Linux mit Mellanox InfiniBand: Verwenden Sie Open-MPI oder MVAPICH2. Wenn Sie eine Version wünschen, die alle MPI-3 oder MPI_THREAD_MULTIPLE unterstützt, benötigen Sie wahrscheinlich MVAPICH2. Ich finde, dass MVAPICH2 sehr gut abschneidet, aber keinen direkten Vergleich mit OpenMPI auf InfiniBand gemacht hat, teilweise weil die Funktionen, für die Leistung mir am wichtigsten ist (RMA alias einseitig) in Open-MPI in der Vergangenheit gebrochen wurden.

  • Linux mit Intel Omni Path (oder seinem Vorgänger, True Scale): Ich habe MVAPICH2, Intel MPI, MPICH und Open-MPI auf solchen Systemen, und alle arbeiten. Intel MPI tendiert dazu, am besten zu optimieren, während Open-MPI die beste Performance der Open-Source-Implementierungen liefert, da sie ein gut optimiertes-basiertes Back-End haben. Ich habe einige notes on GitHub zum Erstellen verschiedener Open-Source-Implementierungen, aber solche Informationen gehen ziemlich schnell veraltet.

  • Cray oder IBM Supercomputer: MPI wird automatisch auf diesen Rechnern installiert und basiert in beiden Fällen auf MPICH. Es gab Demonstrationen von MPICH auf Cray XC40 (here) unter Verwendung von OFI, Intel MPI auf Cray XC40 (here) unter Verwendung von OFI, MPICH auf Blue Gene/Q unter Verwendung von OFI (here) und Open-MPI auf Cray XC40 unter Verwendung von sowohl OFI als auch uGNI (here), aber keine davon wird vom Anbieter unterstützt.

  • Windows: Ich sehe keinen Sinn darin, MPI unter Windows auszuführen, außer über eine Linux VM, aber sowohl Microsoft MPI als auch Intel MPI unterstützen Windows und sind MPICH-basiert. Ich habe keine Berichte über erfolgreiche Builds von MPICH oder Open-MPI unter Verwendung von Windows Subsystem for Linux gesehen.

Hinweise

In vollständige Offenlegung, ich arbeite für Intel derzeit in einem Forschungs/Wegfindung Kapazität (dh ich arbeite nicht auf allen Intel-Software-Produkte) und arbeitete früher für Argonne National Lab seit fünf Jahren, wo ich intensiv mit dem MPICH-Team zusammengearbeitet habe.

+0

Es ist möglich, dass OpenMPI bessere Unterstützung für Shared-Memory in Kollektiven hat, aber ich muss gründlich nachforschen, bevor ich meine Antwort aktualisiere. – Jeff

+1

Können Sie erläutern, warum Sie keinen Sinn darin sehen, MPI unter Windows auszuführen? –

+1

Nein, aber fühlen Sie sich gefragt, eine neue Frage zu StackOverflow über HPC unter Windows zu stellen. – Jeff