2010-06-14 11 views
5

Ist es möglich, zwei Kernel gleichzeitig zu starten, die unabhängige Aufgaben ausführen. Zum Beispiel, wenn ich diesen Cuda CodeSimultaner Start von mehreren Kernen mit CUDA für eine GPU

// host and device initialization 
....... 
....... 

// launch kernel1 
myMethod1 <<<.... >>> (params); 

// launch kernel2 
myMethod2 <<<.....>>> (params); 

Unter der Annahme haben, dass diese Kerne unabhängig sind, ist es eine Möglichkeit, sie zur gleichen Zeit zu starten einige Grids/Blöcke für jede Zuweisung. Hat CUDA/OpenCL diese Bestimmung?

+0

Mit simultan meinen Sie ihre Ausführung synchronisiert oder einfach überlappend? –

Antwort

6

Nur Geräte mit CUDA-Rechenleistung 2.0 und besser (d. H. Fermi) können mehrere gleichzeitige Kernel-Ausführungen unterstützen. Siehe Abschnitt 3.2.6.3 der CUDA 3.0 Programmführer, in dem es heißt:

Einige Geräte von Rechenkapazität 2.0 können mehrere Kernel ausführen gleichzeitig. Anwendungen können diese Fähigkeit abfragen, indem sie cudaGetDeviceProperties() aufrufen und die concurrentKernels Eigenschaft überprüfen.

Die maximale Anzahl der Kernelstarts , die ein Gerät gleichzeitig ausführen kann, ist ist vier.

Ein Kernel aus einem CUDA-Kontext kann nicht gleichzeitig mit einem Kernel aus einem anderen CUDA-Kontext ausgeführt werden.

Kerneln, die viele Texturen oder eine große Menge an lokalen Speicher verwenden, sind weniger wahrscheinlich gleichzeitig mit anderen Kernel auszuführen.

6

Sie benötigen SM 2.0 oder höher für gleichzeitige Kernel.

Um eine gleichzeitige Ausführung zu erhalten, müssen Sie manuell angeben, dass keine Abhängigkeit zwischen den beiden Kerneln besteht. Der Grund dafür ist, dass der Compiler nicht feststellen kann, dass ein Kernel die im anderen verwendeten Daten nicht modifiziert, indem er aus dem gleichen Puffer liest und schreibt, was aber einfach viel schwieriger zu erkennen ist, da es Zeiger geben kann Datenstrukturen und so weiter.

Um die Unabhängigkeit auszudrücken, müssen Sie die Kernel in verschiedenen Streams starten. Der vierte Parameter in der Triple-Chevron-Syntax gibt den Stream an. Weitere Informationen finden Sie in der Programmieranleitung oder im Beispiel SDK-ConcurrentKernels.

3

CUDA Kompatibilität 2.1 = bis zu 16 Concurrent Kernel

Verwandte Themen