MPI + GPU: como misturar as duas técnicas

Meu programa é bem adequado para MPI. Cada CPU faz seu próprio trabalho específico (sofisticado), produz um únicodouble, e então eu uso umMPI_Reduce para multiplicar o resultado de cada CPU.

Mas repito isso muitas e muitas vezes (> 100.000). Assim, ocorreu-me que uma GPU iria acelerar drasticamente as coisas.

Eu tenho google em torno, mas não consigo encontrar nada de concreto. Como você mistura MPI com GPUs? Existe uma maneira para o programa consultar e verificar"oh,isto rank é o GPU, todos os outros são CPUs "? Existe um tutorial recomendado ou algo assim?

Importante, eu não quero ou preciso de um conjunto completo de GPUs. Eu realmente só preciso de um monte de CPUs e, em seguida, uma única GPU para acelerar o uso freqüenteMPI_Reduce Operação.

Aqui está um exemplo esquemático do que estou falando:

Suponha que eu tenha 500 CPUs. Cada CPU de alguma forma produz, digamos, 50doubles. Eu preciso multiplicar todos os 250,00 destesdoubles juntos. Então eu repito isso entre 10.000 e 1 milhão de vezes. Se eu pudesse ter uma GPU (além dos 500 CPUs), isso poderia ser muito eficiente. Cada CPU calcularia seus 50doubles para todos ~ 1 milhão de "estados". Então, todos os 500 processadores enviariam seusdoubles para a GPU. A GPU então multiplicaria os 250.000doubles juntos para cada um dos 1 milhão de "estados", produzindo 1 milhãodoubles.
Esses números não são exatos. O cálculo é de fato muito grande. Estou apenas tentando transmitir o problema geral.

questionAnswers(2)

yourAnswerToTheQuestion