2008-09-27 15 views
22

Tengo que implementar el sistema MPI en un clúster. Si alguien aquí tiene alguna experiencia con MPI (MPICH/OpenMPI), me gustaría saber qué es mejor y cómo se puede aumentar el rendimiento en un clúster de cajas x86_64.Cuál es la mejor implementación de MPI

Respuesta

18

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

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

En cuanto al rendimiento, depende mucho de la aplicación; es difícil dar consejos generales. 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.

+1

El soporte de tolerancia a fallas de MPICH2 se ha mejorado sustancialmente en los últimos tiempos. Si está interesado en utilizar este soporte, puede obtener más información al enviar por correo la lista MPICH2 ([email protected]). –

+0

¿Cómo es posible averiguar qué versión de MPI está usando un servidor determinado? Estoy ejecutando python binding mpi4py, pero necesito saber cuál es la versión subyacente de MPI. – 218

-1

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 su implementación en Windows.
El principal problema de rendimiento que teníamos era que necesitábamos enviar los mismos datos base a todos los nodos y MPICH no (o no) admitía la difusión, por lo que desplegar los datos iniciales era O (n)

+4

MPICH (desarrollado ~ 1993), ha sido compatible con la difusión desde al menos alrededor de 1994. MPICH2 (desarrollado ~ 2000 como el sucesor de MPICH) ha apoyado la transmisión desde muy temprano en el proceso de desarrollo. Quizás quisiste decir algo además de 'MPI_Bcast'? No creo que la versión en stock de ninguna de las implementaciones actualmente sea compatible con la "ejecución ejecutable", donde el programa que se ejecutará se moverá a los nodos por 'mpiexec'. –

+0

¿Olvidé por qué no podíamos diferir, tal vez corriendo sobre TCP o el tamaño de los datos? –

+0

Ninguno de estos es un argumento válido contra la existencia del soporte de MPI_Bcast en MPICH. – Jeff

9

I He escrito bastantes aplicaciones paralelas para clústeres de Windows y Linux, y puedo aconsejarle que en este momento MPICH2 es probablemente la opción más segura. Es, como menciona el otro respondedor, una biblioteca muy madura. Además, ahora hay un amplio soporte de transmisión (a través de MPI_Bcast) y, de hecho, MPICH2 tiene bastantes características realmente agradables como scatter-and-gather.

OpenMPI está ganando algo de terreno. Penguin computing (son un gran proveedor de clústeres y les gusta Linux) en realidad tiene algunos puntos de referencia realmente sólidos en los que OpenMPI derrota MPICH2 en determinadas circunstancias.

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

Echa un vistazo a los foros de MPI: tienen un montón de buenos info about MPI routines, y el sitio Beowulf tiene muchas preguntas interesantes respondidas.

2

'Mejor' es difícil de definir ... 'Más rápido' puede ser respondido comparándolo con su código y su hardware. Cosas como la optimización de descarga colectiva & dependerá de su hardware exacto y también es bastante variable con respecto a las versiones de la pila del controlador, google debería poder encontrarle combinaciones de trabajo.

En cuanto al trabajo de optimización, eso depende un tanto del código y algo del hardware.

¿Su código de E/S está ligado al almacenamiento? En cuyo caso investigar algo mejor que NFS podría ayudar mucho, o usar MPI I/O en lugar de I/O paralela ingenua

Si está vinculado a la red, entonces puede ayudar la ubicación de comunicación y la superposición de comunicación/computación.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 las comunicaciones intranodo, que para algunos códigos puede reducir la carga de la red significativamente.

La segregación de las E/S y el tráfico MPI pueden marcar una gran diferencia en algunos clústeres, especialmente para los clústeres de gigabit ethernet.

Cuestiones relacionadas