Pregunta

Tengo que implementar el sistema MPI en un cluster. Si alguien aquí tiene alguna experiencia con MPI (MPICH / OpenMPI), me gustaría saber cuál es mejor y cómo se puede mejorar el rendimiento en un grupo de cajas x86_64.

¿Fue útil?

Solución

MPICH ha existido mucho más tiempo. Es extremadamente portátil y encontrarás años de consejos y trucos en línea. Es una apuesta segura y es probable que sea compatible con más programas MPI disponibles.

OpenMPI es más nuevo. Si bien no es tan portátil, soporta muy bien las plataformas más comunes. La mayoría de la gente parece pensar que es mucho mejor en varios aspectos, especialmente para la tolerancia a fallas, pero para aprovechar esto es posible que tenga que usar algunas de sus características especiales que no son parte del estándar MPI.

En cuanto al rendimiento, depende mucho de la aplicación; Es difícil dar un consejo general. Debería publicar una pregunta específica sobre el tipo de cálculo que desea ejecutar, la cantidad de nodos y el tipo de hardware, incluido el tipo de hardware de red que está utilizando.

Otros consejos

He escrito bastantes aplicaciones paralelas para clústeres de Windows y Linux, y puedo advertirte que ahora mismo MPICH2 es probablemente la opción más segura. Es, como lo menciona el otro respondedor, una biblioteca muy madura. Además, hay un amplio soporte de transmisión (a través de MPI_Bcast ) ahora, y de hecho, MPICH2 tiene algunas características realmente interesantes como dispersar y juntar .

OpenMPI está ganando terreno sin embargo. La computación Penguin (son un gran proveedor de clústeres, y les gusta Linux) en realidad tiene algunos puntos de referencia realmente sólidos donde OpenMPI supera a MPICH2 en ciertas circunstancias.

En cuanto a su comentario sobre "mejorar el rendimiento", el mejor consejo que puedo dar es que nunca envíe más datos que los absolutamente necesarios si está vinculado a la E / S, y nunca haga más trabajo del necesario si está CPU enlazada. Caí en la trampa de optimizar el código equivocado más de una vez :) ¡Espero que no sigas mis pasos!

Consulte los foros de MPI: tienen una gran cantidad de información sobre las rutinas de MPI , y El sitio Beowulf contiene muchas preguntas interesantes.

'Mejor' es difícil de definir ... 'Más rápido' puede responderse comparándolo con su código y su hardware. Cosas como colectivo & amp; la optimización de la descarga dependerá de su hardware exacto y también es bastante variable en lo que respecta a las versiones de la pila de controladores, Google debería poder encontrar sus combinaciones de trabajo.

En cuanto al trabajo de optimización, eso depende en cierta medida del código y en parte del hardware.

¿Está su E / S de código vinculada al almacenamiento? En cuyo caso, investigar algo mejor que NFS podría ayudar mucho, o usar E / S MPI en lugar de E / S paralelas ingenuas

Si está vinculado a la red, puede ser útil observar la localidad de la comunicación y la superposición de comunicaciones / cómputo. La mayoría de las diversas implementaciones de MPI tienen opciones de ajuste para usar la memoria compartida local en lugar de la red para comunicaciones de intranodo, lo que para algunos códigos puede reducir significativamente la carga de la red.

La segregación del tráfico de E / S y MPI puede hacer una gran diferencia en algunos clústeres, en particular para los clústeres de Ethernet gigabit.

Utilizamos mpich simplemente porque parecía estar más disponible y mejor documentado, no pusimos mucho esfuerzo en probar alternativas. MPICH tiene herramientas razonables para la implementación en Windows.
El principal problema de rendimiento que tuvimos fue que teníamos que enviar la misma base de datos a todos los nodos y MPICH no admite (o no) la difusión, por lo que la implementación de los datos iniciales fue O (n)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top