2010-09-14 4 views
6

Was würde passieren, wenn vier konkurrierende CUDA-Anwendungen um Ressourcen in einer einzigen GPU konkurrieren, damit sie die Arbeit auf die Grafikkarte auslagern können ?. Die Cuda Programming Guide 3.1 erwähnt, dass es bestimmte Methoden sind, die asynchron sind:Parallelität, 4 CUDA-Anwendungen konkurrieren um GPU-Ressourcen

  • Kernel startet
  • Gerätegerätespeicher kopiert
  • Host-Gerätespeicher Kopien eines Speicherblocks von 64 KB oder weniger
  • Speicherkopien von Funktionen durchgeführt, die mit Async versehen sind, sind
  • Speicher set-Funktion ruft

Es wird auch erwähnt, dass Geräte mit Compute-Fähigkeit 2.0 in der Lage sind, mehrere Kernel gleichzeitig auszuführen, solange die Kernel zum selben Kontext gehören.

Gilt diese Art von Nebenläufigkeit nur für Streams innerhalb einer einzigen Cuda-Anwendungen, aber nicht möglich, wenn es verschiedene Anwendungen gibt, die GPU-Ressourcen anfordern?

Bedeutet dies, dass die gleichzeitige Unterstützung nur innerhalb von 1 Anwendung (Kontext ???) verfügbar ist und dass die 4 Anwendungen nur gleichzeitig ausgeführt werden, wie die Methoden durch Kontextwechsel in der CPU überlagert werden, aber die 4 Anwendungen müssen warten, bis die GPU von den anderen Anwendungen freigegeben wird? (d. h. Kernelstart von app4 wartet, bis ein Kernelstart von app1 beendet wird.)

Wenn dies der Fall ist, wie können diese 4 Anwendungen auf GPU-Ressourcen zugreifen, ohne lange Wartezeiten zu erleiden?

Antwort

4

Wie Sie sagten, kann nur ein "Kontext" jeden der Engines zu einem bestimmten Zeitpunkt belegen. Dies bedeutet, dass eine der Copy-Engines ein Memcpy für die Anwendung A, die andere ein Memcpy für die Anwendung B bereitstellen kann und die Compute-Engine einen Kernel für die Anwendung C ausführen kann (zum Beispiel).

Eine Anwendung kann tatsächlich mehrere Kontexte haben, aber keine zwei Anwendungen können denselben Kontext verwenden (obwohl Threads innerhalb einer Anwendung einen Kontext freigeben können).

Jede Anwendung, die Zeitpläne auf der GPU laufen arbeiten (dh eine memcpy oder ein Kernel-Start) die Arbeit planen können asynchron so dass die Anwendung voran gehen frei ist und auf der CPU eine andere Arbeit zu tun und es kann Planen Sie eine beliebige Anzahl von Aufgaben, die auf der GPU ausgeführt werden sollen.

Beachten Sie, dass es auch möglich ist, die GPUs in exklusiven Modus zu setzen, wobei nur ein Kontext auf der GPU jederzeit arbeiten kann (das heißt alle die Ressourcen für den Kontext reserviert sind, bis der Kontext zerstört wird). Der Standardwert ist shared mode.

+0

Hallo Tom. Ich arbeite an einigen Cuda-Projekten und suche nach Partnern. Hast du Lust auf Zusammenarbeit? Momentan arbeite ich an der Integration von ublas und cublas – Anycorn