GPU-Programmierung

Wie erhält bei CUDA das CPU-seitige Programm die Ergebnisse, die ein GPU-Kernel (eine mit __global__ gekennzeichnete Funktion) berechnet hat?

  1. AÜber den Rückgabewert (return) des Kernels, der die Ergebnisse aller Threads gesammelt an die CPU zurückgibt
  2. BDer Kernel schreibt seine Ergebnisse in ein Array im GPU-Speicher, und die CPU-Seite kopiert dieses Array nach Ende des Kernels in den CPU-Speicher (oder liest Unified Memory)
  3. CDas CPU-seitige Programm liest die Werte, die jeder Thread mit printf ausgegeben hat, als Variablen ein
Antwort und Erläuterung anzeigen

Antwort: B. Der Kernel schreibt seine Ergebnisse in ein Array im GPU-Speicher, und die CPU-Seite kopiert dieses Array nach Ende des Kernels in den CPU-Speicher (oder liest Unified Memory)

Ein GPU-Kernel wird von vielen Threads gleichzeitig ausgeführt und kann seine Ergebnisse daher nicht als einzelnen Rückgabewert liefern; bei CUDA muss eine __global__-Funktion den Rückgabetyp void haben. Die CPU-Seite reserviert ein Array im GPU-Speicher und übergibt dessen Zeiger als Argument, und jeder Thread schreibt sein Ergebnis in das Element, für das er zuständig ist. Da Kernel-Starts asynchron sind, kopiert die CPU-Seite das Array nach Ende des Kernels mit cudaMemcpy o. Ä. zurück (im selben Stream wartet die Kopie auf das Ende des vorherigen Kernels). printf im Kernel ist ein Debugging-Hilfsmittel zur Anzeige; das Programm kann diese Werte nicht einlesen.

Dieses Thema üben Zur Themenseite

Passende Rechner

Weitere Fragen zu GPU-Programmierung

  1. Auf einer GPU mit einer Obergrenze von 1024 Threads pro Thread-Block wird ein CUDA-Kernel mit blockDim.x = 2048 gestartet. Was passiert im Allgemeinen?
  2. Ein SM einer GPU habe eine Ausgabeeinheit, die pro Zyklus Befehle eines Warps ausgeben kann. Jeder Warp gibt wiederholt 20 Zyklen lang Befehle aus und wartet dann 400 Zyklen auf das Ergebnis eines Speicherladevorgangs. Wie viele Warps sind mindestens nötig, um Leerlauf durch Speicherwartezeiten zu vermeiden (Latenzverdeckung), wenn der Warp-Wechsel keine Zeit kostet?
  3. Welche Aussage zum Unterschied in der Entwurfsphilosophie von CPU und GPU ist richtig?
  4. Welches Merkmal beschreibt Aufgaben, die sich auf der GPU schnell verarbeiten lassen, am besten?
  5. Welche Verarbeitung läuft auf der GPU tendenziell ineffizient?

Vergleiche zu diesem Thema