Gibt es eine Methode, um die GPU zwischen zwei separaten OpenCL-fähigen Programmen zu teilen, oder genauer zwischen zwei separaten Prozessen, die beide die GPU benötigen, um OpenCL-Kernel auszuführen? Wenn ja, wie wird das gemacht?Freigeben der GPU zwischen OpenCL-fähigen Programmen
Antwort
Es hängt davon ab, was Sie teilen teilen.
Im Allgemeinen können Sie zwei Prozesse erstellen, die beide ein OpenCL-Gerät auf derselben GPU erstellen. Es ist dann die Verantwortung des Treibers/OS/GPU, sicherzustellen, dass die Dinge funktionieren.
Das heißt, die meisten Implementierungen werden die GPU-Ausführung zeitlich abschneiden, um dies zu erreichen (genau wie es bei Grafiken passiert).
Ich denke, das ist nicht genau das, wonach Sie streben. Können Sie Ihre Frage mit einem Anwendungsfall erweitern?
Aktuelle GPUs (außer NVidias Fermi) unterstützen keine gleichzeitige Ausführung von mehr als einem Kernel. Außerdem unterstützen GPUs zu diesem Zeitpunkt kein präemptives Multitasking. es ist völlig kooperativ! Die Ausführung eines Kerns kann nicht ausgesetzt und später fortgesetzt werden. Die Granularität jeder zeitbasierten GPU-Freigabe hängt von den Ausführungszeiten der Kernel ab.
Wenn Sie mehrere Programme ausführen, die GPU-Zugriff benötigen, sollten Sie sicherstellen, dass Ihre Kernel kurze Laufzeiten haben (< 100ms ist eine Faustregel), so dass GPU-Zeit zwischen den Kernen, die GPU-Zyklen wünschen, synchronisiert werden kann . Dies ist auch wichtig, da sonst die Grafik des Host-Systems nicht mehr reagiert, da sie auch GPU-Zugriff benötigen. Dies kann so weit gehen, dass ein Kernel in einer endlosen oder langen Schleife das System abstürzen wird.
Der Anwendungsfall wäre ein einzelner Prozess, der OpenCL verwendet, um die GPU für einen längeren Zeitraum zu verwenden. Wenn ein anderer OpenCL-Prozess gestartet wird, der auch die GPU erfordert, wie wird das gehandhabt? Ihre Antwort schlägt vor, dass der Fahrer eine Zeitscheibe schneidet, d. H. Die gesamte GPU zu einem gegebenen Zeitpunkt einem Prozess zuweist. Sicherlich ist dies ineffizient, da die mit jedem Prozess verbundenen Daten zwischen dem Gerät und dem Host hin- und herkopiert werden müssen? – Chris
@Chris: Die kurze Antwort ist, dass nicht alle Daten kopiert werden müssen. Die Ausführung ist zeitlich begrenzt, aber der Speicher kann geteilt bleiben, wenn beide auf die Karte passen (der Speicher ist "virtualisiert". Siehe URL unten). Wenn es nicht passt, wird es Daten sicher kopieren. Die Granularität des Time-Slicing ist ebenfalls grob. Vorausgesetzt, wir sprechen Windows, wird in WDDM 1.1 ein CL-Kernellauf nie unterbrochen und mehr. Weitere Informationen finden Sie unter http://en.wikipedia.org/wiki/Windows_Display_Driver_Model. – Bahbar
Insbesondere: http://download.microsoft.com/download/5/b/9/5b97017b-e28a-4bae-ba48-174cf47d23cd/PRI103_WH06.ppt – Bahbar