2010-10-30 17 views
5

Tengo una aplicación de C/C++ que hace crujir números. Básicamente es un bucle principal para diferentes conjuntos de datos. Obtuvimos acceso a un clúster de 100 nodos con openmp y mpi disponibles. Me gustaría acelerar la aplicación, pero soy un novato absoluto tanto para mpi como para openmp. Me pregunto cuál es el más fácil de aprender y depurar, incluso si el rendimiento no es el mejor.¿Qué es más fácil de aprender y depurar OpenMP o MPI?

También me pregunto cuál es la más adecuada para mi aplicación de ciclo principal.

Gracias

Respuesta

3

Si su programa es sólo un gran bucle utilizando OpenMP puede ser tan simple como escribir:

#pragma omp parallel for 

OpenMP sólo es útil para la programación de memoria compartida, que a no ser que el clúster ejecuta algo así como kerrighed significa que la versión paralela que usa OpenMP solo se ejecutará a lo sumo un nodo a la vez.

MPI se basa en la transmisión de mensajes y es un poco más complicado para empezar. Sin embargo, la ventaja es que su programa podría ejecutarse en varios nodos a la vez, pasando mensajes entre ellos cuando sea necesario. Dado que dijiste "para diferentes conjuntos de datos", parece que tu problema podría caer en la categoría "vergonzosamente paralela", donde si tienes más de 100 conjuntos de datos podrías simplemente configurar el programador para ejecutar uno conjunto de datos por nodo hasta que todos estén completos, sin necesidad de modificar su código y casi una velocidad de 100x con solo usar un solo nodo.

Por ejemplo, si su clúster usa cóndor como planificador, puede enviar 1 trabajo por cada elemento de datos al universo "general", variando solo la línea "Argumentos =" de la descripción del trabajo. (Hay otras maneras de hacer esto para Condor que pueden ser más sensatas y también hay cosas similares para torque, sge, etc.)

+0

+1 por mencionar kerrighed – srean

+0

Gracias. ¡Me divierto jugando con eso para trabajar un tiempo después de que mosix/openmosix muriera! – Flexo

1

OpenMP es esencialmente para máquinas SMP, por lo que si desea escalar a cientos de nodos, necesitará MPI de todos modos. Sin embargo, puede usar ambos. MPI para distribuir el trabajo entre los nodos y OpenMP para gestionar el paralelismo entre núcleos o varias CPU por nodo. Yo diría que OpenMP es mucho más fácil que jugar con pthreads. Pero al ser más grueso, la velocidad que obtendrás de OpenMP generalmente será menor que una implementación de pthreads optimizada a mano.

Cuestiones relacionadas