GPU-programmeren

Welke uitspraak over bank conflicts van CUDA shared memory is juist?

  1. AEen probleem waarbij twee GPU's dezelfde bankrekening gebruiken
  2. BEen probleem waarbij de capaciteit van shared memory tekortschiet en het programma stopt
  3. CShared memory is verdeeld in 32 banks, en als meerdere threads van een warp tegelijk verschillende adressen in dezelfde bank lezen, worden de toegangen na elkaar uitgevoerd en daalt de snelheid
Antwoord en toelichting tonen

Antwoord: C. Shared memory is verdeeld in 32 banks, en als meerdere threads van een warp tegelijk verschillende adressen in dezelfde bank lezen, worden de toegangen na elkaar uitgevoerd en daalt de snelheid

Shared memory bestaat uit 32 banks waaraan om de 4 bytes opeenvolgend adressen zijn toegewezen, en elke bank kan per keer slechts één adres lezen of schrijven. Als de 32 threads van een warp verschillende banks gebruiken, volstaat één keer, maar als twee threads verschillende adressen in dezelfde bank gebruiken, wordt het in twee keer gesplitst. Bij het lezen van bijvoorbeeld elke 32 elementen komt iedereen op dezelfde bank terecht en splitst het zich in 32 keer. Als iedereen hetzelfde adres leest, wordt het in één keer aan allen uitgedeeld en is er geen conflict.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over GPU-programmeren

  1. 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?
  2. 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?
  3. Wat kan er gebeuren in een GPU-kernel als het registergebruik per thread te hoog is?
  4. Welke uitspraak over de bezettingsgraad (occupancy) van een GPU is juist?
  5. Welke methode is de belangrijkste waarmee een GPU lange geheugenlatentie (enkele honderden klokcycli) verbergt?

Vergelijkingen bij dit onderwerp