GPU-programmeren

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?

  1. A3
  2. B4
  3. C1000
Antwoord en toelichting tonen

Antwoord: B. 4

1000÷256≈3,9; als naar beneden wordt afgerond tot 3 blocks, worden slechts 256×3=768 elementen verwerkt en blijft de rest liggen. Er worden daarom naar boven afgerond 4 blocks (1024 threads) gestart, en de overgebleven 24 threads moeten niets doen. In het algemeen rondt men naar boven af met een berekening zoals '(n + 256 - 1) / 256'. Binnen de kernel moet het nummer worden gecontroleerd, zodat de overgebleven threads niet buiten de array lezen of schrijven.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over GPU-programmeren

  1. Waarom wordt in de bovenstaande CUDA-kernel 'if (i < n)' opgenomen?
  2. Hoe heet bij NVIDIA-GPU's de eenheid waarin 32 threads tot één bundel worden gevormd die dezelfde instructie tegelijk uitvoert?
  3. Welke uitspraak over het verschil tussen de SIMT-methode (single instruction, multiple threads) van de GPU en SIMD-instructies van de CPU is juist?
  4. 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?
  5. Zowel (1) als (2) hierboven laat de helft van de threads A en de rest B uitvoeren. Welke uitleg is juist met betrekking tot de efficiëntie van de warps (uitgaande van 32 threads per warp)?

Vergelijkingen bij dit onderwerp