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?
- ADe rekeneenheden van de GPU zijn defect
- BDe data wordt in de GPU telkens herschreven
- 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.