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
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.
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)
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'. –
¿Olvidé por qué no podíamos diferir, tal vez corriendo sobre TCP o el tamaño de los datos? –
Ninguno de estos es un argumento válido contra la existencia del soporte de MPI_Bcast en MPICH. – Jeff
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.
'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.
- 1. ¿Cuál es el mejor tutorial para aprender MPI para C++?
- 2. Implementación de MPI para Java
- 3. ¿Cuál es la mejor estrategia de implementación de Drupal?
- 4. ¿Cuál es la implementación de dict mejor ordenada en python?
- 5. Cuál es la mejor estrategia de implementación para ASP.NET
- 6. Java - ¿Cuál es la mejor estructura de implementación para Graph?
- 7. ¿Cuál es la mejor implementación para AOP en .Net?
- 8. Implementación de la aplicación MPI en Windows Azure
- 9. ¿Cuál es la implementación canónica del descuento?
- 10. ¿Cuál es la mejor opción?
- 11. ¿Cuál es la mejor manera de probar una implementación de Mutex?
- 12. ¿Cuál es la forma estándar/mejor de implementación de ruta en iPhone?
- 13. ¿Cuál es la "mejor" implementación canónica de Equals() para los tipos de referencia?
- 14. Cuál es la mejor aplicación de .dispose()
- 15. ¿Cuál es la implementación de funciones genéricas mejor mantenida para Python?
- 16. ¿Cuál es el mejor proceso/aplicación para la implementación automatizada de aplicaciones PHP?
- 17. Cuál es la mejor implementación de lista para listas grandes en java
- 18. ¿Cuál es la mejor y más completa implementación de los comandos del sistema Unix para Windows?
- 19. ¿Cuál es la mejor implementación del Esquema para trabajar a través del SICP?
- 20. Cuál es mejor pulpo o msdeploy para la implementación automática en varios servidores usando teamcity
- 21. ¿Cuál es la mejor pila Java SIP?
- 22. ¿Cuál es la definición de un detalle de implementación?
- 23. ¿Cuál es el fundamento de la implementación de boost :: none_t?
- 24. Android Login - Mejor implementación
- 25. ¿Cuál es la mejor manera de implementar protocolos?
- 26. Mejor implementación de StAX
- 27. ¿Cuál es la implementación más simple de RTTI para C++?
- 28. ¿Cuál es la clase de implementación para IGrouping?
- 29. ¿Cuál es la implementación recomendada de Bcrypt C?
- 30. En .NET, ¿cuál es la implementación interna de un delegado?
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]). –
¿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