GPU-programmeren

Welke uitspraak over de relatie tussen blocks en SM's (streaming multiprocessors) in CUDA is juist?

  1. ADe threads van één block worden verspreid over alle SM's uitgevoerd
  2. BHet aantal SM's en het aantal blocks moeten altijd gelijk zijn
  3. CElk block wordt aan één SM toegewezen en daar tot het einde uitgevoerd, en op één SM kunnen meerdere blocks tegelijk staan
Antwoord en toelichting tonen

Antwoord: C. Elk block wordt aan één SM toegewezen en daar tot het einde uitgevoerd, en op één SM kunnen meerdere blocks tegelijk staan

Een GPU heeft veel SM's en wijst de blocks van een kernel achtereenvolgens toe aan vrije SM's. Eén block wordt op één SM uitgevoerd, dus de threads in het block gebruiken het shared memory van die SM en kunnen synchroniseren. Als het aantal blocks ruim groter is dan het aantal SM's, krijgen ook bij verschillende GPU-groottes alle SM's werk, en wordt aan een SM die klaar is het volgende block toegewezen.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over GPU-programmeren

  1. In CUDA wil men halverwege een kernel wachten tot de berekeningen van alle andere blocks klaar zijn voordat men naar de volgende fase gaat. Welke methode is gebruikelijk?
  2. Bij het maken van een histogram van pixelwaarden op een GPU kan het traag zijn als alle threads rechtstreeks met atomicAdd bij de 256 bins in global memory optellen. Welke verbetermethode is juist?
  3. Waarom wordt bij het berekenen van de som van veel waarden op een GPU een reductie in boomvorm gebruikt (herhaaldelijk naburige waarden optellen en zo halveren)?
  4. Hoeveel stappen zijn nodig om 1024 waarden met een reductie in boomvorm te sommeren?
  5. Welke uitspraak is in het algemeen juist over het geheugen aan de CPU-zijde en dat aan de GPU-zijde bij een programma dat een discrete GPU gebruikt?

Vergelijkingen bij dit onderwerp