Boost :: mpi ou C MPI pour des applications scientifiques hautes performances?

16

La chose que je n'aime pas le plus à propos de MPI concerne les types de données (c'est-à-dire les cartes / masques de données) car ils ne correspondent pas très bien au C ++ orienté objet. boost::mpine prend en charge que MPI 1.1, cependant, à partir de leur site Web:

boost :: mpi est une interface conviviale C ++ vers l'interface de transmission de messages standard… Boost.MPI peut créer des types de données MPI pour les types définis par l'utilisateur à l'aide de la bibliothèque Boost.Serialization

Quelqu'un a-t-il eu de l'expérience en boost::mpiinformatique scientifique sérieuse? Le recommanderiez-vous? Avez-vous rencontré des problèmes (problèmes de mise à l'échelle, problèmes de compilation, erreurs, fonctionnalités non implémentées, nécessité de certaines fonctionnalités mpi 2.2)?

Pouvez-vous commenter l'utilisation boost::mpiau lieu d'utiliser l'implémentation MPI C de C ++? Pouvez-vous combiner les deux (utilisez boost :: mpi quand vous le pouvez, C-MPI ailleurs)?

Connaissez-vous un grand code scientifique utilisant boost::mpi?

gnzlbg
la source
Vous devriez également consulter cette page boost.org/doc/libs/1_50_0/doc/html/mpi/… afin de vous assurer que toutes les fonctions dont vous avez besoin sont prises en charge. La possibilité de les mettre en œuvre vous-même doit également être envisagée.
Alexander
1
La meilleure raison pour laquelle je peux penser à utiliser Boost :: MPI est qu'il prend en charge la sérialisation des types C ++ automatiquement. L'interface MPI C ne peut pas le faire seule et vous devez créer des types de données MPI pour tous vos objets C ++ afin de les passer via Send / Recv, etc., sauf si vous voulez faire votre propre sérialisation par d'autres moyens.
Jeff
L'interface MPI Elemental (libelemental.org) ( github.com/elemental/Elemental/blob/master/src/core/imports/… ) effectue la détection automatique de type de manière élégante. Cependant, il n'essaye pas de faire beaucoup de choses que Boost :: MPI fait.
Jeff

Réponses:

13

J'ai toujours pensé que nous devrions l'utiliser dans notre propre projet, deal.II, car il est de niveau supérieur au MPI pur et peut enregistrer quelques lignes de code ici et là. Cela dit, ce que j'ai appris au fil des ans, c'est que la plupart des codes de haut niveau n'ont pas vraiment beaucoup de code MPI pour commencer - les 600000 lignes de code en jeu. Je n'ai que ~ 50 appels vers MPI. C'est certainement beaucoup moins qu'un package tel que PETSc, mais je pense qu'il est néanmoins vrai que la plupart des codes ont moins d'appels MPI que ce à quoi on pourrait s'attendre au début et que, par conséquent, l'avantage d'utiliser quelque chose de niveau supérieur n'est pas aussi grand qu'un peut penser à première vue.

Ce que cela se résume alors à vous, c'est de considérer quels sont les compromis. Quelle quantité de MPI devrez-vous utiliser et comment cela se compare-t-il à l'effort supplémentaire requis pour créer et lier une bibliothèque externe.

Wolfgang Bangerth
la source
6

Pour autant que je sache, boost::mpic'est juste un c++wrapper autour de l' CAPI. En tant que tel, vous devriez pouvoir utiliser boost::mpiet basculer vers l' CAPI chaque fois que certaines fonctionnalités ne sont pas implémentées. En effet, depuis leur page web:

Les abstractions minces dans Boost.MPI permettent de le combiner facilement avec des appels à la bibliothèque C MPI sous-jacente.

Je ne l'ai pas utilisé moi-même et je ne connais pas de bibliothèque majeure qui le fasse, mais je m'attends à ce que ce soit juste un wrapper léger et en tant que tel, il ne faut pas se soucier des performances par rapport à l' CAPI.

GradGuy
la source
2
Boost :: MPI est un wrapper autour d'un sous-ensemble de MPI; si je me souviens bien, il ne prend en charge que MPI 1.2, ce qui est loin des normes MPI-2.2 ou MPI-3 à mes égards.
Jeff