GPU-Programmierung

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?

int i = blockIdx.x * blockDim.x + threadIdx.x;
  1. A517
  2. B263
  3. C2565
Antwort und Erläuterung anzeigen

Antwort: A. 517

blockIdx.x ist die Nummer des Blocks im Grid, blockDim.x die Zahl der Threads pro Block und threadIdx.x die Nummer des Threads im Block. Block 0 ist für 0 bis 255 zuständig, Block 1 für 256 bis 511; der Thread mit Nummer 5 in Block 2 hat daher 2×256+5=517. Mit dieser Formel erhält jeder Thread eine eindeutige, überschneidungsfreie laufende Nummer, die das zugewiesene Array-Element bestimmt.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu GPU-Programmierung

  1. 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?
  2. Was ist der Grund für die Bedingung „if (i < n)“ im oben gezeigten CUDA-Kernel?
  3. Wie heißt bei NVIDIA-GPUs die Einheit, in der 32 Threads zu einem Bündel zusammengefasst werden und dieselbe Anweisung gleichzeitig ausführen?
  4. Welche Aussage zum Unterschied zwischen dem SIMT-Verfahren (Single Instruction, Multiple Threads) der GPU und SIMD-Befehlen der CPU ist richtig?
  5. 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?

Vergleiche zu diesem Thema