Wat is Shared memory?

Klein, snel geheugen binnen elke SM van de GPU dat door threads van hetzelfde blok kan worden gedeeld. Het programma bepaalt wat erin wordt geplaatst.

Japanse benaming: シェアードメモリ

“Shared memory” komt voor in 14 oefenvragen uit 1 onderwerpen, bijv. GPU-programmeren.

Vakgebied: GPU-programmeren

Nu oefenen: vragen over Shared memory

Welke uitspraak over de kenmerken van CUDA shared memory is juist?

  1. AEen groot hoofdgeheugen dat door alle GPU's en CPU's wordt gedeeld
  2. BEen gebied waarin het geheugen van de GPU met een harde schijf wordt gedeeld
  3. CEen klein, snel geheugen op de chip dat door de threads van hetzelfde block kan worden gedeeld en expliciet door het programma wordt gebruikt
Antwoord en toelichting tonen

Antwoord: C. Een klein, snel geheugen op de chip dat door de threads van hetzelfde block kan worden gedeeld en expliciet door het programma wordt gebruikt

Shared memory is een snel geheugen in elke SM van enkele tientallen KB per block, dat tientallen keren sneller kan worden gelezen en geschreven dan global memory (het DRAM van de GPU). Omdat de threads van hetzelfde block er data in kunnen plaatsen en delen, wordt het gebruikt om data één keer uit global memory te lezen en meerdere keren te gebruiken of om tussenresultaten tussen threads door te geven. Anders dan bij een cache bepaalt het programma wat erin wordt geplaatst.

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.

“Shared memory” in de toelichting

Vragen met “Shared memory” (14)

  1. Welke uitspraak over de kenmerken van CUDA shared memory is juist?
  2. Welke uitspraak over bank conflicts van CUDA shared memory is juist?
  3. 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?
  4. 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?
  5. Wat is het belangrijkste doel van het laten lopen via shared memory bij het transponeren van een grote matrix op een GPU (b[j][i] = a[i][j])?
  6. Welke combinatie van de hiërarchie van CUDA-threads is juist (van groot naar klein)?
  7. Welke uitspraak over de werking van __syncthreads() in CUDA is juist?
  8. Welke uitspraak over de bezettingsgraad (occupancy) van een GPU is juist?
  9. Welke uitspraak over de relatie tussen blocks en SM's (streaming multiprocessors) in CUDA is juist?
  10. 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?
  11. 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)?
  12. Welke algemene richtlijn voor het bepalen van het aantal threads per block in CUDA is juist?
  13. Welke uitspraak is juist over een kenmerk van GPU-caches in vergelijking met CPU's?
  14. Welk voorbeeld van een programmeermechanisme voor parallelle berekeningen op GPU's e.d., dat ook voor andere GPU's dan die van NVIDIA kan worden gebruikt, is juist?

Verwante termen

GPU CUDA Streaming multiprocessor (SM) Bank Numerieke apertuur (NA) Via Occupancy OpenCL FPGA Bankconflict

Naar de woordenlijst