2010-08-25 6 views
17

Gibt es eine maximale Anzahl von Streams, die in CUDA erstellt werden können?Gibt es eine maximale Anzahl von Streams in CUDA?

Zur Klarstellung meine ich CUDA-Streams wie im Stream, mit dem Sie Kernel und Speicheroperationen ausführen können.

+0

Meinst du CUDA-Streams (die parallele Speicheroperationen und Kernel-Ausführungen bereitstellen) oder CUDA-Threads (um einen einzelnen Kernel auszuführen). – KoppeKTop

Antwort

11

Ich habe in keiner Dokumentation ein Limit gesehen, aber das bedeutet nicht, dass alle Streams gleichzeitig ausgeführt werden, da dies ein Hard-Hardware-Limit ist (Multiprozessoren, Register usw.).

10

Gemäß dieser NVIDIA-Präsentation sind max 16 Streams (auf Fermi).

Um zu verdeutlichen, habe ich erfolgreich mehr als 16 Streams erstellt, aber ich denke, die Hardware kann nur 16 gleichzeitige Kernel unterstützen, so dass die überschüssigen in Bezug auf Nebenläufigkeit verschwendet werden.

Kepler ist wahrscheinlich anders.

16

Es gibt keine realistische Grenze für die Anzahl der Streams, die Sie erstellen können (mindestens 1000). Es gibt jedoch eine Begrenzung für die Anzahl der Streams, die Sie effektiv verwenden können, um Parallelität zu erzielen.

In Fermi unterstützt die Architektur gleichzeitige 16-Wege-Kernel-Starts, es gibt jedoch nur eine einzige Verbindung vom Host zur GPU. Selbst wenn Sie also 16 CUDA-Streams haben, werden diese schließlich in eine HW-Warteschlange geleitet. Dies kann falsche Datenabhängigkeiten erzeugen und die Menge an Gleichzeitigkeit begrenzen, die man leicht erhalten kann.

Mit Kepler beträgt die Anzahl der Verbindungen zwischen dem Host und der GPU jetzt 32 (statt einer mit Fermi). Mit der neuen Hyper-Q-Technologie ist es jetzt viel einfacher, die GPU mit gleichzeitiger Arbeit zu beschäftigen.

+2

Sie können den Overhead zum Erstellen und Löschen von Streams erwähnen, der Auswirkungen hat, wenn viele Streams erstellt und zerstört werden. – harrism

+1

@Mark Ebersole Aber warum mussten wir 32 Verbindungen zwischen dem Host und der GPU für die nur 16-Wege-gleichzeitige Kernel-Starts von Streams auf Kepler? – Alex

Verwandte Themen