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::mpi
ne 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::mpi
informatique 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::mpi
au 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
?
Réponses:
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.
la source
Pour autant que je sache,
boost::mpi
c'est juste unc++
wrapper autour de l'C
API. En tant que tel, vous devriez pouvoir utiliserboost::mpi
et basculer vers l'C
API chaque fois que certaines fonctionnalités ne sont pas implémentées. En effet, depuis leur page web: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'
C
API.la source