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?
- ADe tabel als 32×32 laten en de leesvolgorde willekeurig maken
- BGeen shared memory meer gebruiken en alles uit global memory lezen
- 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.