2010-03-11 6 views
95

Quelqu'un peut-il élaborer les différences entre les implémentations OpenMPI et MPICH de MPI? Lequel des deux est une meilleure implémentation?MPICH vs OpenMPI

+1

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

+2

Nous avons personnellement choisi OpenMPI comme implémentation MPI. Pour nous, il était mieux référencé et la transférabilité n'était pas un problème. Voir le lien de la question Taylor L a posté. – Xorlev

+0

vous pouvez également considérer que dans [Google tendances] (https://trends.google.com/trends/explore?q=openmpi,MPICH2,mpich,%2Fm%2F03z8q2,%2Fm%2F07yb2g) OpenMPI est 2-3 fois plus recherché que MPICH/MPICH2. – Foad

Répondre

11

Si vous faites du développement plutôt que du système de production, optez pour MPICH. MPICH a un débogueur intégré, tandis que Open-MPI ne dure pas la dernière fois que j'ai vérifié.

En production, Open-MPI sera probablement plus rapide. Mais alors vous voudrez peut-être rechercher d'autres alternatives, telles que Intel MPI.

+1

Merci pour le pourboire !! – lava

+2

Je ne suis pas sûr de ce que vous entendez par débogueur intégré, mais je trouve que Open-MPI a une bonne intégration avec, par exemple, gdb: https://www.open-mpi.org/faq/?category=debugging. – Jeff

+0

Pour la production, avez-vous des idées sur l'utilisation de MPICH avec TAO? – namu

10

Je suis d'accord avec l'affiche précédente. Essayez à la fois de voir laquelle votre application s'exécute plus rapidement, puis utilisez-la pour la production. Ils sont tous les deux conformes aux normes. Si c'est votre bureau, c'est bien. OpenMPI sort de la boîte sur Macbooks, et MPICH semble être plus compatible Linux/Valgrind. C'est entre vous et votre toolchain.

S'il s'agit d'un cluster de production, vous devez effectuer une analyse comparative plus approfondie pour vous assurer qu'il est optimisé pour votre topologie de réseau. La configuration sur un cluster de production sera la principale différence en termes de temps que vous aurez à RTFM.

+11

Si tout le monde RTFMed, nous n'aurions pas besoin de StackOverflow :-) – Jeff

+1

FWIW, Open-MPI a une entrée FAQ sur Valgrind-cleanliness: https://www.open-mpi.org/faq/?category=debugging#valgrind_clean – Jeff

+0

@Jeff Um et les bugs? Des docs périmés? C'est derrière une pluralité de mes (centaines de ..) questions ici;) – javadba

6

Les deux sont conformes aux normes, donc cela ne devrait pas importer ce que vous utilisez du point de vue de la correction. À moins qu'il y ait une fonctionnalité, telle que des extensions de débogage spécifiques, dont vous avez besoin, puis comparez les deux et choisissez celle qui est la plus rapide pour vos applications sur votre matériel. Considérez également qu'il y a d'autres implémentations MPI qui pourraient donner de meilleures performances ou compatibilité, comme MVAPICH (peut avoir les meilleures performances InfiniBand) ou Intel MPI (largement supporté ISVs). HP a travaillé dur pour obtenir leur MPI qualifié avec beaucoup de codes ISV aussi, mais je ne sais pas comment il se porte après avoir été vendu sur la plate-forme ...

105

Objet

D'abord, il est important de reconnaître comment MPICH et Open-MPI sont différents, c'est-à-dire qu'ils sont conçus pour répondre à différents besoins. MPICH est censé être une implémentation de référence de haute qualité de la dernière norme MPI et la base des implémentations dérivées pour répondre aux besoins spécifiques. OpenMPI cible le cas commun, à la fois en termes d'utilisation et de réseaux.

Prise en charge de la technologie réseau

ouvert MPI documente leur soutien réseau here. MPICH répertorie ces informations dans le fichier README distribué avec chaque version (par exemple, this pour 3.2.1). Notez que parce que Open-MPI et MPICH prennent en charge la couche de réseau OFI (alias libfabric), ils prennent en charge plusieurs des mêmes réseaux. Cependant, libfabric est une API multi-facettes, donc tous les réseaux ne peuvent pas être supportés de la même manière dans les deux (par exemple, MPICH a une implémentation IBM Blue Gene/Q basée sur OFI, mais je ne connais pas de support équivalent dans Open-MPI) . Cependant, les implémentations basées sur OFI de MPICH et d'Open-MPI travaillent sur de la mémoire partagée, Ethernet (via TCP/IP), Mellanox InfiniBand, Intel Omni Path et probablement d'autres réseaux. Open-MPI prend également en charge ces deux réseaux et d'autres nativement (c'est-à-dire sans OFI au milieu). Dans le passé, une plainte courante à propos de MPICH est qu'elle ne prend pas en charge InfiniBand, contrairement à Open-MPI. Cependant, MVAPICH et Intel MPI (entre autres) - tous deux dérivés de MPICH - supportent InfiniBand, donc si on veut définir MPICH comme "MPICH et ses dérivés", alors MPICH a un support réseau très large, incluant InfiniBand et propriétaire des interconnexions comme Cray Seastar, Gemini et Aries ainsi que IBM Blue Gene (/ L,/P et/Q). Open-MPI supporte également Cray Gemini, mais il n'est pas supporté par Cray. Plus récemment, MPICH a pris en charge InfiniBand via un netmod (maintenant obsolète), mais MVAPICH2 possède des optimisations étendues qui en font l'implémentation préférée dans presque tous les cas.

Support fonction de la dernière MPI standard

Un axe orthogonal au matériel/support de plate-forme est la couverture de la norme MPI. Ici, MPICH est habituellement de loin supérieur. MPICH a été la première implémentation de chaque version de la norme MPI, de MPI-1 à MPI-3. OpenMPI a récemment pris en charge MPI-3 et je trouve que certaines fonctionnalités de MPI-3 sont buggées sur certaines plates-formes.

Historiquement, OpenMPI n'a pas eu de support holistique pour MPI_THREAD_MULTIPLE, ce qui est critique pour certaines applications. Il peut être pris en charge sur certaines plates-formes, mais ne peut généralement pas être supposé fonctionner. D'autre part, MPICH a eu un soutien holistique pour MPI_THREAD_MULTIPLE pendant de nombreuses années.

Une autre caractéristique qui a été cassée dans Open-MPI 1.x était la communication unilatérale, alias RMA. Cela a été corrigé plus récemment et je trouve, en tant qu'utilisateur très lourd de ces fonctionnalités, qu'ils fonctionnent généralement bien dans Open-MPI 3.x (voir par exemple le ARMCI-MPI test matrix in Travis CI pour les résultats montrant RMA travaillant avec les deux implémentations, au moins en partage -Memory. J'ai vu des résultats positifs similaires sur Intel Omni chemin, mais ne l'ai pas testé InfiniBand Mellanox.

Process Management

Un domaine où ouvert MPI autrefois était significativement supérieur au gestionnaire de processus. l'ancien Le lancement de MPICH (MPD) était fragile et difficile à utiliser.Par heureusement, il a été déconseillé pendant de nombreuses années (voir le MPICH FAQ entry pour plus de détails) .Par conséquent, la critique de MPICH parce que MPD est fausse

Le gestionnaire de processus Hydra est assez bon et a la même facilité d'utilisation et les mêmes fonctionnalités que ORTE (en Open-MPI), par ex. les deux supportent HWLOC pour le contrôle de la topologie de processus.

J'ai trouvé que Open-MPI était plus robuste lorsque vous utilisiez MacOS avec un VPN, c'est-à-dire que MPICH peut se bloquer au démarrage en raison de problèmes de résolution de nom d'hôte. Comme il s'agit d'un bug, ce problème pourrait disparaître dans le futur.

plate-forme spécifique Comparaison

Voici mon évaluation sur une plate-forme par plate-forme base:

  • Mac OS: à la fois ouvert et MPI MPICH devrait fonctionner très bien. Pour obtenir les dernières fonctionnalités de la norme MPI-3, vous devez utiliser une version récente d'Open-MPI, disponible chez Homebrew. Il n'y a aucune raison de penser aux performances de MPI si vous utilisez un ordinateur portable Mac.

  • Linux avec mémoire partagée: Open-MPI et MPICH devraient fonctionner correctement. Si vous voulez une version de version qui supporte tout MPI-3 ou MPI_THREAD_MULTIPLE, vous aurez probablement besoin de MPICH, à moins que vous ne construisiez Open-MPI vous-même, parce que par exemple. Ubuntu 16.04 ne fournit que l'ancienne version 1.10 via APT. Je ne suis pas au courant de différences significatives de performance entre les deux implémentations. Les deux prennent en charge les optimisations à copie unique si le système d'exploitation les autorise.

  • Linux avec Mellanox InfiniBand: utilisez Open-MPI ou MVAPICH2. Si vous voulez une version qui supporte MPI-3 ou MPI_THREAD_MULTIPLE, vous avez probablement besoin de MVAPICH2. Je trouve que MVAPICH2 fonctionne très bien mais n'a pas fait de comparaison directe avec OpenMPI sur InfiniBand, en partie parce que les fonctionnalités pour lesquelles les performances m'importent le plus (RMA aka unilatéralement) ont été rompues dans Open-MPI dans le passé.Linux avec Intel Omni Path (ou son prédécesseur, True Scale): J'ai utilisé MVAPICH2, Intel MPI, MPICH et Open-MPI sur ces systèmes, et tous fonctionnent. Intel MPI a tendance à être le plus optimisé tandis qu'Open-MPI offre les meilleures performances des implémentations open-source, car elles ont un back-end basé sur PSM2 bien optimisé. J'ai quelques notes on GitHub sur la façon de construire différentes implémentations open-source, mais ces informations vont plutôt vite.

  • Supercalculateurs Cray ou IBM: MPI est installé automatiquement sur ces machines et il est basé sur MPICH dans les deux cas. MPICH sur Cray XC40 (here) en utilisant OFI, MPICH sur Blue Gene/Q en utilisant OFI (here), et Open-MPI sur Cray XC40 en utilisant à la fois OFI et uGNI (here), mais aucun d'entre eux n'est pris en charge par le fournisseur. Windows: Je ne vois pas l'intérêt d'exécuter MPI sous Windows, sauf via une machine virtuelle Linux, mais Microsoft MPI et Intel MPI prennent en charge Windows et sont basés sur MPICH. Je n'ai vu aucun rapport de versions réussies de MPICH ou Open-MPI utilisant Windows Subsystem for Linux.

Notes de

Dans la divulgation complète, je travaille actuellement pour Intel dans une capacité de recherche/pathfinding (c.-à-je ne travaille pas sur tous les produits logiciels Intel) et auparavant travaillé pour le laboratoire national Argonne pendant cinq ans, où j'ai collaboré intensivement avec l'équipe MPICH.

+0

Il est possible qu'OpenMPI ait un support supérieur pour la mémoire partagée dans les collectifs, mais j'ai besoin d'étudier complètement avant de mettre à jour ma réponse. – Jeff

+1

Pouvez-vous expliquer pourquoi vous ne voyez aucun intérêt à lancer MPI sous Windows? –

+1

Non, mais n'hésitez pas à poser une nouvelle question sur StackOverflow à propos de HPC sous Windows. – Jeff

Questions connexes