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?
[2] http://www.nvidia.com/content/PDF/kepler/NVIDIA-Kepler-GK110-Architecture-Whitepaper.pdf
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 /). –
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. –
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). –