GPU-Programmierung
Welche Aussage zum Verhalten unmittelbar nach dem Start eines Kernels durch das CPU-seitige Programm in CUDA ist im Allgemeinen richtig?
- ADie CPU hält stets an, bis der Kernel beendet ist, und kann nichts tun
- BDer Kernel wird auf der CPU ausgeführt
- CDer Start ist asynchron; die CPU fährt fort, ohne auf das Ende des Kernels zu warten, und muss vor der Verwendung des Ergebnisses synchronisieren
Antwort und Erläuterung anzeigen
Antwort: C. Der Start ist asynchron; die CPU fährt fort, ohne auf das Ende des Kernels zu warten, und muss vor der Verwendung des Ergebnisses synchronisieren
Ein Kernel-Start fügt der Befehlsfolge an die GPU lediglich eine Verarbeitung hinzu, und die Kontrolle kehrt sofort zur CPU-Seite zurück. Die CPU kann daher, während die GPU rechnet, z. B. die nächsten Daten vorbereiten. Bevor das Ergebnis auf der CPU gelesen wird, muss das Ende des Kernels jedoch durch cudaDeviceSynchronize oder durch Kopieren des Ergebnisses (im selben Stream wird auf den Abschluss der vorherigen Verarbeitung gewartet) sichergestellt werden. Auch bei Zeitmessungen lässt sich die Kernel-Zeit ohne Synchronisation nicht korrekt messen.