GPU-programmeren
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?
- AOm uit global memory gelezen data in shared memory vaak te hergebruiken en het aantal toegangen tot het trage geheugen te verminderen
- BOm de waarden van de matrices te verkleinen en overflow te voorkomen
- COm het aantal berekeningen te verminderen en het resultaat te benaderen
Antwoord en toelichting tonen
Antwoord: A. Om uit global memory gelezen data in shared memory vaak te hergebruiken en het aantal toegangen tot het trage geheugen te verminderen
Bij een matrixproduct worden dezelfde elementen vele malen in berekeningen gebruikt. Bij een naïeve implementatie leest elke thread telkens opnieuw uit global memory, waardoor de geheugenbandbreedte tekortschiet. Als tiles in shared memory worden geladen, kunnen alle threads van het block die tiles herhaaldelijk gebruiken en neemt de hoeveelheid uit global memory gelezen data af in verhouding tot de tilegrootte. Het is hetzelfde idee als blocking in de CPU-cache.