2012-10-01 11 views
9

Ich habe eine Anwendung, in der ich eine einzelne GPU zwischen mehreren Prozessen teilen möchte. Das heißt, jeder dieser Prozesse würde einen eigenen CUDA- oder OpenCL-Kontext erstellen, der auf dieselbe GPU abzielt. Laut dem Whitepaper von Fermi [1] beträgt die Context-Umschaltung auf Anwendungsebene weniger als 25 Mikrosekunden, aber die Starts werden beim Start auf der GPU effektiv serialisiert - daher würde Fermi nicht gut funktionieren. Laut dem Kepler-Whitepaper [2] gibt es etwas namens Hyper-Q, das bis zu 32 gleichzeitige Verbindungen von mehreren CUDA-Streams, MPI-Prozessen oder Threads innerhalb eines Prozesses ermöglicht.Concurrent GPU Kernel-Ausführung von mehreren Prozessen

Meine Fragen: Hat jemand dies auf einer Kepler GPU versucht und verifiziert, dass seine Kernel gleichzeitig ausgeführt werden, wenn sie von verschiedenen Prozessen geplant werden? Ist das nur eine CUDA-Funktion, oder kann es auch mit OpenCL auf Nvidia-GPUs verwendet werden? Unterstützen AMDs GPUs etwas Ähnliches?

[1] http://www.nvidia.com/content/PDF/fermi_white_papers/NVIDIA_Fermi_Compute_Architecture_Whitepaper.pdf

[2] http://www.nvidia.com/content/PDF/kepler/NVIDIA-Kepler-GK110-Architecture-Whitepaper.pdf

+2

Als Antwort auf die erste Frage, die Sie stellen, hat nvidia einige Hyper-Q-Ergebnisse in einem Blog [hier] veröffentlicht (http://blogs.nvidia.com/2012/08/unleash-legacy-mpi-codes-with -keplers-hyper-q /). –

+0

Interessant, danke für den Link. Dieser Blogeintrag impliziert auch, dass die K10-GPUs nicht über Hyper-Q verfügen, während der K20 dies tun wird. –

+0

Das ist richtig. Sie werden den Kepler-Whitepaper-Link bemerken, den Sie im Titel mit den Verweisen "GK110" versehen haben. Die GPU auf K20 ist GK110. Die GPU auf K10 ist GK104 (zwei von ihnen). –

Antwort

7

Als Antwort auf die erste Frage hat NVIDIA einige Hyper-Q Ergebnisse in einem Blog here veröffentlicht. Der Blog weist darauf hin, dass die Entwickler, die CP2K portierten, schneller zu beschleunigten Ergebnissen kommen konnten, weil Hyper-Q ihnen erlaubte, die MPI-Struktur der Anwendung mehr oder weniger unverändert zu nutzen und mehrere Ränge auf einer einzigen GPU auszuführen höhere effektive GPU-Auslastung auf diese Weise. Wie in den Kommentaren erwähnt, ist dieses Feature (Hyper-Q) derzeit nur auf K20-Prozessoren verfügbar, da es von der GK110-GPU abhängig ist.

+0

Danke Robert, das ist gut für die erste Frage, und ich denke, ich werde weiter nach den anderen suchen müssen. –

-2

Ich habe simultane Kernel von Fermi-Architektur ausgeführt funktioniert es wunderbar und in der Tat, ist oft der einzige Weg, um hohe Auslastung von Ihrer Hardware zu bekommen. Ich habe OpenCL verwendet und Sie müssen eine separate Befehlswarteschlange von einem separaten CPU-Thread ausführen, um dies zu tun. Hyper-Q ist die Fähigkeit, neue Daten parallel Kernel von innerhalb eines anderen Kernels zu versenden. Dies ist nur auf Kepler.