parallel processing - software - Cuál es la mejor implementación de MPI
mpi tutorial example (4)
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 conjunto de cajas x86_64.
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 a rendimiento, depende mucho de la aplicación; es difícil dar consejos generales. Debe 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.
Usamos 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 tuvimos fue que necesitábamos enviar los mismos datos base a todos los nodos y MPICH no (o no) admitió la difusión, por lo que la implementación de los datos iniciales fue O (n)
He escrito bastantes aplicaciones paralelas para clusters de Windows y Linux, y puedo aconsejarle que ahora mismo 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 sin embargo. 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 tu comentario sobre "aumentar el rendimiento", el mejor consejo que puedo darte es que nunca envíes más datos de los absolutamente necesarios si estás vinculado a E / S, y nunca hagas más trabajo del necesario si estás atado a la CPU. He caído en la trampa de optimizar el código incorrecto más de una vez :) ¡Espero que no sigas mis pasos!
Eche un vistazo a los foros de MPI: tienen mucha información útil sobre las rutinas de MPI , y el sitio de Beowulf tiene muchas preguntas interesantes contestadas.
''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 colectiva y de descarga 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 a la optimización, eso depende en cierto modo 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 paralelo ingenuo
Si está vinculado a la red, puede ser útil observar la ubicación de comunicación y la superposición de comunicación / comunicació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 del tráfico de I / O y MPI puede marcar una gran diferencia en algunos clusters, particularmente para los clústeres de ethernet de gigabit.