GPU-programmeren

Waarom wordt bij gemengde precisie op een GPU vaak de vermenigvuldiging in lage precisie zoals FP16 uitgevoerd en de sommatie (accumulatie) in FP32?

  1. AOmdat vermenigvuldiging in FP32 niet mogelijk is
  2. BOmdat bij het optellen van veel producten in lage precisie afrondingsfouten zich ophopen en kleine waarden verloren gaan, dus alleen de accumulatie in hoge precisie wordt uitgevoerd
  3. COmdat optellen in FP16 niet mogelijk is
Antwoord en toelichting tonen

Antwoord: B. Omdat bij het optellen van veel producten in lage precisie afrondingsfouten zich ophopen en kleine waarden verloren gaan, dus alleen de accumulatie in hoge precisie wordt uitgevoerd

De mantisse van FP16 heeft slechts 10 bits, dus als een klein product bij een grote geworden som wordt opgeteld, kan het product door afronding verdwijnen. Bij een matrixproduct worden duizenden producten opgeteld, en als deze fout zich ophoopt, wijkt het resultaat sterk af. Daarom wordt de vermenigvuldiging, die veel geheugen vraagt en de rekeneenheid zwaar belast, in lage precisie gedaan en alleen de accumulatie in FP32. De meeste tensor cores kunnen zo'n multiply-accumulate met één instructie uitvoeren.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over GPU-programmeren

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

Vergelijkingen bij dit onderwerp