GPU-Programmierung
Warum wird bei gemischter Genauigkeit auf der GPU häufig die Multiplikation in niedriger Genauigkeit wie FP16 und die Aufsummierung (Akkumulation) in FP32 ausgeführt?
- AWeil Multiplikationen in FP32 nicht möglich sind
- BWeil sich beim Aufsummieren vieler Produkte in niedriger Genauigkeit Rundungsfehler ansammeln und kleine Werte verloren gehen, daher wird nur die Akkumulation mit hoher Genauigkeit ausgeführt
- CWeil Additionen in FP16 nicht möglich sind
Antwort und Erläuterung anzeigen
Antwort: B. Weil sich beim Aufsummieren vieler Produkte in niedriger Genauigkeit Rundungsfehler ansammeln und kleine Werte verloren gehen, daher wird nur die Akkumulation mit hoher Genauigkeit ausgeführt
Die Mantisse von FP16 hat nur 10 Bit, sodass beim Addieren eines kleinen Produkts zu einer groß gewordenen Summe das Produkt durch Rundung verschwinden kann. Beim Matrixprodukt werden tausende Produkte aufsummiert, und häufen sich diese Fehler, weicht das Ergebnis stark ab. Daher wird die Multiplikation, die viel Speicher und Recheneinheiten belastet, in niedriger Genauigkeit ausgeführt und nur die Akkumulation in FP32. Viele Tensor Cores führen diese Form des Multiply-Accumulate mit einer Anweisung aus.