GPU-Programmierung

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?

  1. A3
  2. B4
  3. C1000
Antwort und Erläuterung anzeigen

Antwort: B. 4

1000÷256≈3,9; bei Abrunden auf 3 Blöcke würden nur 256×3=768 Elemente verarbeitet, und der Rest bliebe unbearbeitet. Es werden daher aufgerundet 4 Blöcke (1024 Threads) gestartet, und die 24 überzähligen Threads tun nichts. Allgemein wird mit „(n + 256 - 1) / 256“ aufgerundet. Damit die überzähligen Threads nicht außerhalb des Arrays lesen oder schreiben, muss im Kernel die Nummer geprüft werden.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu GPU-Programmierung

  1. Was ist der Grund für die Bedingung „if (i < n)“ im oben gezeigten CUDA-Kernel?
  2. Wie heißt bei NVIDIA-GPUs die Einheit, in der 32 Threads zu einem Bündel zusammengefasst werden und dieselbe Anweisung gleichzeitig ausführen?
  3. Welche Aussage zum Unterschied zwischen dem SIMT-Verfahren (Single Instruction, Multiple Threads) der GPU und SIMD-Befehlen der CPU ist richtig?
  4. Innerhalb eines Warps teilt sich durch eine bedingte Verzweigung eine Hälfte der Threads auf die if-Seite und die andere Hälfte auf die else-Seite auf (Warp Divergence). Wie wird dies im Allgemeinen ausgeführt?
  5. Beide Varianten (1) und (2) oben lassen eine Hälfte der Threads A und die andere Hälfte B ausführen. Welche Aussage zur Warp-Effizienz ist richtig (ein Warp habe 32 Threads)?

Vergleiche zu diesem Thema