Pregunta

Quiero escribir un convertidor de código que tiene un programa paralelo basado OpenMP y lo ejecuta en un clúster.

¿Cómo hago para este problema? Lo que las bibliotecas lo uso? ¿Cómo puedo configurar un pequeño grupo para esto?

Me resulta muy difícil encontrar un buen material sobre la computación de cluster en internet.

EDIT: Si es imposible entonces, ¿cómo Intel lo hace? El compilador de Intel parece hacer exactamente lo que yo quiero. No tengo ninguna aplicación específica que me gustaría correr. Quiero escribir el "convertidor A / compilador", no de la aplicación. Entiendo que la memoria compartida es diferente de memoria distribuida, pero tiene que haber una manera de sincronizar la memoria, si no en todos los casos, después de algunos casos específicos, incluso si esto significa que la aplicación está escrita con construcciones personalizados.

¿Fue útil?

Solución

Me parece que esto no es una buena idea.

La idea básica detrás de OpenMP es la ejecución en paralelo de datos compartida. Funciona bien, cuando se accede a los datos compartidos no le cuesta nada. Cada hilo puede acceder a una variable en caché o RAM compartida.

Los cálculos de racimo explotan de paso de mensajes, porque los ordenadores en el grupo han distribuido memoria. Cuando un proceso necesita datos de otra, entonces debería gestionar los datos que pasan a través de la red. Es la operación que consume tiempo.

Por lo tanto, si usted quiere escribir como compilador, se deben implementar las operaciones de radiodifusión de datos (por ejemplo MPI_Bcast de MPI) para cada acceso a datos en OpenMP. Esto matará el rendimiento paralelo en absoluto.

Otros consejos

Intel tiene una implementación de OpenMP que funciona con su C ++ y Fortran compiladores para x86 grupos de 64 bits. Puede obtener una versión de evaluación de 30 días de estos compiladores de forma gratuita. Aparte de eso, es sobre todo Zifre derecha. Si usted está preocupado con la escalabilidad, de tripas corazón y escribir su programa paralelo en otro modelo de programación (MPI, CUDA, Cilk, ...) que está diseñado con sistemas distribuidos en mente. Si proporciona un poco más de información acerca de su aplicación, que puede ser capaz de proporcionar una guía más útil en ese frente.

Esto simplemente no es posible. Usted tiene que estructurar su código de una manera completamente diferente a conseguir que funcione en un clúster (programación de múltiples máquinas es muy diferente de la programación de una máquina).

No hay polvo mágico magia para hacer esto.

Por otro lado, si usted escribe su programa con las agrupaciones en mente, es posible ejecutarlo en una sola máquina (aunque, obviamente, será más lento).

SCORE / SCASH y el compilador OpenMP Omni

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