Mehrere Host-Threads, die einzelne CUDA-Kernel starten

8

Für meine CUDA Entwicklung verwende ich eine Maschine mit 16 Kernen und 1 GTX 580 GPU mit 16 SMs. Für die Arbeit, die ich mache, plane ich 16 Host-Threads (1 auf jedem Kern) und 1 Kernel-Start pro Thread, jeweils mit 1 Block und 1024 Threads. Mein Ziel ist es 16 Kernel parallel auf 16 SMs laufen zu lassen. Ist das möglich / machbar?

Ich habe versucht, so viel wie möglich über unabhängige Kontexte zu lesen, aber es scheint nicht zu viel Information verfügbar zu sein. Wie ich es verstehe, kann jeder Host-Thread seinen eigenen GPU-Kontext haben. Aber ich bin mir nicht sicher, ob die Kernel parallel laufen, wenn ich unabhängige Kontexte verwende.

Ich kann alle Daten von allen 16 Host-Threads in einer riesigen Struktur lesen und sie an GPU übergeben, um einen Kernel zu starten. Es wird jedoch zu viel kopieren und es wird die Anwendung verlangsamen.

    
gmemon 06.09.2012, 05:56
quelle

2 Antworten

4

Während eine Multithread-Anwendung mehrere CUDA-Kontexte gleichzeitig auf derselben GPU speichern kann, können diese Kontexte keine Operationen gleichzeitig ausführen. Wenn diese Option aktiviert ist, verwendet jeder Kontext die GPU und muss vor einem anderen Kontext (der Operationen mit einer Rendering-API oder einem Displaymanager umfassen kann) Zugriff auf die GPU haben.

Kurz gesagt, diese Strategie kann nicht mit aktuellen CUDA-Versionen oder Hardware funktionieren.

    
talonmies 06.09.2012, 20:18
quelle
6

Sie können jeweils nur einen Kontext auf einer GPU haben. Eine Art, die Art von Parallelität zu erreichen, die Sie benötigen, wäre die Verwendung von CUDA-Streams. Sie können innerhalb des Kontexts 16 Streams erstellen und Memcopies und Kernel nach Namen in Streams starten. Weitere Informationen finden Sie in einem kurzen Webinar zur Verwendung von Streams unter: Ссылка . Die vollständige API-Referenz finden Sie in den CUDA Toolkit-Handbüchern. Das Handbuch zu CUDA 4.2 ist unter Ссылка verfügbar.

    
Vyas 06.09.2012 18:45
quelle

Tags und Links