GPU-programmeren

Een tabel van 32×32 floats staat in shared memory en de 32 threads van een warp lezen in de kolomrichting (verticaal), waardoor een bank conflict ontstaat. Welke maatregel wordt veel toegepast?

  1. ADe tabel als 32×32 laten en de leesvolgorde willekeurig maken
  2. BGeen shared memory meer gebruiken en alles uit global memory lezen
  3. CDe tabel als 32×33 reserveren, dus met één kolom extra, zodat de positie van de bank per rij verschuift
Antwoord en toelichting tonen

Antwoord: C. De tabel als 32×33 reserveren, dus met één kolom extra, zodat de positie van de bank per rij verschuift

Als een rij uit 32 floats (128 bytes) bestaat, begint elke rij bij dezelfde bank, dus alle elementen van dezelfde kolom komen in dezelfde bank terecht en 32 threads die verticaal lezen concentreren zich in één bank. Bij 33 elementen per rij verschuift de bank bij elke volgende rij met één, zodat de 32 elementen van dezelfde kolom over verschillende banks verspreid liggen en in één keer kunnen worden gelezen. Het is een eenvoudige maatregel waarbij alleen geheugen van één ongebruikte kolom wordt toegevoegd.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over GPU-programmeren

  1. Waarom worden bij het berekenen van een product van grote matrices op een GPU de matrices in kleine tiles verdeeld en in shared memory geladen?
  2. Wat kan er gebeuren in een GPU-kernel als het registergebruik per thread te hoog is?
  3. Welke uitspraak over de bezettingsgraad (occupancy) van een GPU is juist?
  4. Welke methode is de belangrijkste waarmee een GPU lange geheugenlatentie (enkele honderden klokcycli) verbergt?
  5. Welke uitspraak over de occupancy van een GPU is juist?

Vergelijkingen bij dit onderwerp