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?
- AOmdat vermenigvuldiging in FP32 niet mogelijk is
- 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
- 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.