GPU-programmeren

Welke rangschikking is voordelig voor coalesced geheugentoegang wanneer data van deeltjes met posities x, y en z op een GPU wordt verwerkt?

  1. AEen array van structuren waarin per deeltje x, y en z naast elkaar staan
  2. BAlle waarden in willekeurige volgorde
  3. CGescheiden arrays met alleen x, alleen y en alleen z (een structuur van arrays in plaats van een array van structuren)
Antwoord en toelichting tonen

Antwoord: C. Gescheiden arrays met alleen x, alleen y en alleen z (een structuur van arrays in plaats van een array van structuren)

Bij een array van structuren (AoS) staan x, y en z van deeltje 0, daarna die van deeltje 1, enzovoort. Als elke thread x leest, liggen de adressen telkens 12 bytes uit elkaar. Met een structuur van arrays (SoA), waarin alleen x achter elkaar staat, lezen naburige threads x op naburige adressen en is de toegang dus coalesced. Ook bij SIMD van de CPU is SoA om dezelfde reden vaak voordelig.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over GPU-programmeren

  1. Welke uitspraak over de kenmerken van CUDA shared memory is juist?
  2. Welke uitspraak over de werking van __syncthreads() in CUDA is juist?
  3. In CUDA wordt __syncthreads() binnen 'if (threadIdx.x < 16)' geplaatst, zodat alleen een deel van de threads er doorheen komt. Wat kan er juist gebeuren?
  4. Welke uitspraak over bank conflicts van CUDA shared memory is juist?
  5. 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?

Vergelijkingen bij dit onderwerp