GPU-programmeren

Bij het berekenen van de som van drijvende-kommagetallen van dezelfde data op een GPU week het laatste cijfer van het resultaat bij elke uitvoering lichtjes af. Wat is de meest waarschijnlijke oorzaak?

  1. ADe rekeneenheden van de GPU zijn defect
  2. BDe data wordt in de GPU telkens herschreven
  3. CDoor onder meer atomaire bewerkingen verandert de volgorde van optellen per uitvoering, en bij optelling van drijvende-kommagetallen verandert het afrondingsresultaat met de volgorde
Antwoord en toelichting tonen

Antwoord: C. Door onder meer atomaire bewerkingen verandert de volgorde van optellen per uitvoering, en bij optelling van drijvende-kommagetallen verandert het afrondingsresultaat met de volgorde

Bij optelling van drijvende-kommagetallen treedt telkens afronding op, dus (a+b)+c en a+(b+c) kunnen een licht verschillend resultaat geven. Bij een parallelle som verandert de volgorde waarin de waarden van welke threads worden opgeteld met de uitvoeringsvolgorde van de threads en de aankomstvolgorde van atomaire bewerkingen. Daardoor verandert het laatste cijfer per uitvoering. Als het resultaat elke keer gelijk moet zijn, wordt een reductie met vaste optelvolgorde gebruikt.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over GPU-programmeren

  1. Welke algemene richtlijn voor het bepalen van het aantal threads per block in CUDA is juist?
  2. Welk voordeel van het schrijven van een kernel met een lus zoals hierboven (grid-stride loop) is juist?
  3. Bij welke toegang werkt CUDA constant memory bijzonder snel?
  4. Welke uitspraak is juist over een kenmerk van GPU-caches in vergelijking met CPU's?
  5. 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?

Vergelijkingen bij dit onderwerp