Lo que más me disgusta de MPI es tratar con tipos de datos (es decir, mapas / máscaras de datos) porque no encajan muy bien con C ++ orientado a objetos. boost::mpi
solo es compatible con MPI 1.1, sin embargo, desde su sitio web:
boost :: mpi es una interfaz amigable de C ++ para la interfaz estándar de paso de mensajes ... Boost.MPI puede construir tipos de datos MPI para tipos definidos por el usuario utilizando la biblioteca Boost.Serialization
¿Alguien ha tenido alguna experiencia con boost::mpi
la informática científica seria? ¿Lo recomendarías? ¿Tuvo algún problema (problemas de escala, problemas del compilador, errores, características no implementadas, la necesidad de algunas características de mpi 2.2)?
¿Puedes comentar sobre el uso en boost::mpi
lugar de usar la implementación MPI C de C ++? ¿Puedes combinar ambos (usa boost :: mpi cuando puedas, C-MPI en otro lugar)?
¿Conoces algún código científico extenso boost::mpi
?
Respuestas:
Siempre he pensado que deberíamos usarlo en nuestro propio proyecto, deal.II, porque tiene un nivel más alto que el MPI puro y puede guardar algunas líneas de código aquí y allá. Dicho esto, lo que aprendí a lo largo de los años es que la mayoría del código de alto nivel en realidad no tiene tanto código MPI para empezar: las 600,000 líneas de código en el trato. Solo tengo ~ 50 llamadas a MPI. Ciertamente, eso es mucho menos que un paquete como PETSc, pero creo que, sin embargo, es cierto que la mayoría de los códigos tienen menos llamadas MPI de lo que uno esperaría al principio y que, en consecuencia, el beneficio de usar algo de nivel superior no es tan bueno como uno puede pensar a primera vista.
A continuación, todo se reduce a que consideres cuáles son las compensaciones. Cuánto MPI necesitará usar, y cómo se compara eso con el esfuerzo adicional requerido para construir y vincular con una biblioteca externa.
fuente
Hasta donde yo sé,
boost::mpi
es solo unc++
contenedor alrededor de laC
API. Como tal, debería poder usarboost::mpi
y cambiar a laC
API siempre que no se implemente alguna funcionalidad. De hecho, desde su página web:No lo he usado yo mismo, y no conozco una biblioteca importante que lo haga, pero esperaría que fuera solo un contenedor ligero y, como tal, no debería preocuparme por el rendimiento en comparación con la
C
API.fuente