GPU-programmeren
Welke rangschikking is voordelig voor coalesced geheugentoegang wanneer data van deeltjes met posities x, y en z op een GPU wordt verwerkt?
- AEen array van structuren waarin per deeltje x, y en z naast elkaar staan
- BAlle waarden in willekeurige volgorde
- 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.