GPU-Programmierung

Welche Verarbeitung läuft auf der GPU tendenziell ineffizient?

  1. AEine verkettete Liste Element für Element vom Anfang her durchlaufen, wobei der Wert jedes Elements die nächste Aktion bestimmt
  2. BElementweise Addition zweier großer Arrays
  3. CVerdoppelung der Helligkeit aller Pixel eines großen Bildes
Antwort und Erläuterung anzeigen

Antwort: A. Eine verkettete Liste Element für Element vom Anfang her durchlaufen, wobei der Wert jedes Elements die nächste Aktion bestimmt

Bei einer verketteten Liste ist der Ort des nächsten Elements erst bekannt, wenn das vorherige gelesen wurde, sodass sie nicht parallel durchlaufen werden kann. Hängt zudem die Aktion vom Wert ab, verzweigen sich die Threads eines Bündels, das dieselbe Anweisung ausführt, und die Effizienz sinkt. Auch die Speicherorte sind verstreut und können nicht gebündelt gelesen werden. Für die GPU eignen sich Aufgaben, die für jedes Element unabhängig sind und dieselbe Verarbeitung auf Daten an aufeinanderfolgenden Adressen anwenden.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu GPU-Programmierung

  1. Welche Aussage zum „Kernel“ in der GPU-Programmierung, etwa mit CUDA, ist richtig?
  2. Welche Kombination der Thread-Hierarchie in CUDA ist richtig (von groß nach klein)?
  3. In einem CUDA-Kernel wird die Nummer i jedes Threads mit der oben gezeigten Formel bestimmt. Welchen Wert hat i für den Thread mit blockIdx.x=2, blockDim.x=256 und threadIdx.x=5?
  4. Ein Array mit 1000 Elementen soll mit 256 Threads pro Block verarbeitet werden, wobei jeder Thread ein Element bearbeitet. Wie viele Blöcke müssen gestartet werden?
  5. Was ist der Grund für die Bedingung „if (i < n)“ im oben gezeigten CUDA-Kernel?

Vergleiche zu diesem Thema