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?

  1. AOm uit global memory gelezen data in shared memory vaak te hergebruiken en het aantal toegangen tot het trage geheugen te verminderen
  2. BOm de waarden van de matrices te verkleinen en overflow te voorkomen
  3. 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.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over GPU-programmeren

  1. Wat kan er gebeuren in een GPU-kernel als het registergebruik per thread te hoog is?
  2. Welke uitspraak over de bezettingsgraad (occupancy) van een GPU is juist?
  3. Welke methode is de belangrijkste waarmee een GPU lange geheugenlatentie (enkele honderden klokcycli) verbergt?
  4. Welke uitspraak over de occupancy van een GPU is juist?
  5. Welke uitspraak over de relatie tussen blocks en SM's (streaming multiprocessors) in CUDA is juist?

Vergelijkingen bij dit onderwerp