GPU-programmeren

In een CUDA-kernel wordt met bovenstaande formule het nummer i van elke thread bepaald. Wat is i voor de thread met blockIdx.x=2, blockDim.x=256 en threadIdx.x=5?

int i = blockIdx.x * blockDim.x + threadIdx.x;
  1. A517
  2. B263
  3. C2565
Antwoord en toelichting tonen

Antwoord: A. 517

blockIdx.x is het nummer van het block binnen het grid, blockDim.x het aantal threads per block en threadIdx.x het nummer van de thread binnen het block. Block 0 behandelt 0 tot 255 en block 1 behandelt 256 tot 511, dus de thread met nummer 5 in block 2 krijgt 2×256+5=517. Met deze formule krijgt elke thread een doorlopend, niet-overlappend nummer waarmee wordt bepaald welk array-element hij behandelt.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over GPU-programmeren

  1. Een array van 1000 elementen moet worden verwerkt met 256 threads per block en één element per thread. Welk aantal blocks dat moet worden gestart is juist?
  2. Waarom wordt in de bovenstaande CUDA-kernel 'if (i < n)' opgenomen?
  3. Hoe heet bij NVIDIA-GPU's de eenheid waarin 32 threads tot één bundel worden gevormd die dezelfde instructie tegelijk uitvoert?
  4. Welke uitspraak over het verschil tussen de SIMT-methode (single instruction, multiple threads) van de GPU en SIMD-instructies van de CPU is juist?
  5. Binnen één warp splitst een voorwaardelijke sprong de helft van de threads naar de if-zijde en de rest naar de else-zijde (warp divergence). Hoe wordt dit over het algemeen uitgevoerd?

Vergelijkingen bij dit onderwerp