MPI + GPU: So mischen Sie die beiden Techniken

Mein Programm eignet sich gut für MPI. Jede CPU erledigt ihre eigene (anspruchsvolle) Aufgabe und erzeugt eine einzigedoubleund dann benutze ich einMPI_Reduce um das Ergebnis von jeder CPU zu multiplizieren.

Aber ich wiederhole das viele Male (> 100.000). Daher kam mir der Gedanke, dass eine GPU die Dinge dramatisch beschleunigen würde.

Ich habe eine Google-Suche durchgeführt, kann aber nichts Konkretes finden. Wie mischt man MPI mit GPUs? Gibt es eine Möglichkeit für das Programm abzufragen und zu überprüfen"Oh,diese Rang ist die GPU, alle anderen sind CPUs "? Gibt es ein empfohlenes Tutorial oder so?

Wichtig ist, dass ich keinen vollständigen Satz von GPUs möchte oder benötige. Ich brauche wirklich nur eine Menge CPUs und dann eine einzelne GPU, um die häufig verwendeten zu beschleunigenMPI_Reduce Operation.

Hier ist ein schematisches Beispiel dafür, wovon ich spreche:

Angenommen, ich habe 500 CPUs. Jede CPU produziert etwa 50doubles. Ich muss alle 250,00 von diesen multiplizierendoubles zusammen. Dann wiederhole ich das zwischen 10.000 und 1 Million Mal. Wenn ich eine GPU haben könnte (zusätzlich zu den 500 CPUs), könnte dies sehr effizient sein. Jede CPU würde ihre 50 berechnendoubles für alle ~ 1 Million "Staaten". Dann würden alle 500 CPUs ihre sendendoubles zur GPU. Die GPU würde dann die 250.000 multiplizierendoubles zusammen für jede der 1 Million "Staaten", produziert 1 Milliondoubles.
Diese Zahlen sind nicht genau. Der Rechenaufwand ist in der Tat sehr groß. Ich versuche nur, das allgemeine Problem zu vermitteln.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage