MPI + GPU: cómo mezclar las dos técnicas

Mi programa es muy adecuado para MPI. Cada CPU hace su propio trabajo específico (sofisticado), produce un solodouble, y luego uso unMPI_Reduce para multiplicar el resultado de cada CPU.

Pero repito esto muchas, muchas veces (> 100,000). Por lo tanto, se me ocurrió que una GPU aceleraría dramáticamente las cosas.

He buscado en google, pero no puedo encontrar nada concreto. ¿Cómo vas sobre mezclar MPI con GPUs? ¿Hay alguna manera para que el programa consulte y verifique?"Oh,esta Rango es la GPU, todos los demás son CPU "? ¿Hay algún tutorial recomendado o algo así?

Es importante destacar que no quiero ni necesito un conjunto completo de GPU. Realmente solo necesito un montón de CPU, y luego una sola GPU para acelerar el uso frecuenteMPI_Reduce operación.

Aquí hay un ejemplo esquemático de lo que estoy hablando:

Supongamos que tengo 500 CPUs. Cada CPU de alguna manera produce, digamos, 50doubles. Necesito multiplicar todos los 250,00 de estos.doubles juntos Luego repito esto entre 10.000 y 1 millón de veces. Si pudiera tener una GPU (además de las 500 CPU), esto podría ser realmente eficiente. Cada CPU computaría sus 50doubles para todos los ~ 1 millón de "estados". Entonces, las 500 CPUs enviarían susdoubles a la GPU. La GPU multiplicaría entonces las 250.000.doubles juntos por cada 1 millón de "estados", produciendo 1 millóndoubles.
Estos números no son exactos. El cálculo es de hecho muy grande. Solo estoy tratando de transmitir el problema general.

Respuestas a la pregunta(2)

Su respuesta a la pregunta