Boost :: mpi o C MPI para aplicaciones científicas de alto rendimiento?

16

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::mpisolo 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::mpila 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::mpilugar 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?

gnzlbg
fuente
También debe consultar esta página boost.org/doc/libs/1_50_0/doc/html/mpi/… para asegurarse de que todas las funciones que necesita sean compatibles. También se debe considerar la posibilidad de implementarlos usted mismo.
Alexander
1
La mejor razón por la que se me ocurre utilizar Boost :: MPI es que admite la serialización de tipos C ++ automáticamente. La interfaz MPI C no puede hacer esto por sí sola y tendría que crear tipos de datos MPI para todos sus objetos C ++ para pasarlos a través de Enviar / Recibir, etc., a menos que desee hacer su propia serialización por algún otro medio.
Jeff
La interfaz MPI Elemental (libelemental.org) ( github.com/elemental/Elemental/blob/master/src/core/imports/… ) realiza la detección automática de tipos de una manera elegante. Sin embargo, no intenta hacer muchas de las cosas que hace Boost :: MPI.
Jeff

Respuestas:

13

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.

Wolfgang Bangerth
fuente
6

Hasta donde yo sé, boost::mpies solo un c++contenedor alrededor de la CAPI. Como tal, debería poder usar boost::mpiy cambiar a la CAPI siempre que no se implemente alguna funcionalidad. De hecho, desde su página web:

Las delgadas abstracciones en Boost.MPI permiten combinarlo fácilmente con llamadas a la biblioteca subyacente de C MPI.

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 CAPI.

GradGuy
fuente
2
Boost :: MPI es un contenedor alrededor de un subconjunto de MPI; Según recuerdo, solo admite MPI 1.2, que está muy lejos de los estándares MPI-2.2 o MPI-3 en mis aspectos.
Jeff