GPU程式設計
在GPU的混合精度計算中,常以FP16等低精度進行乘法,而以FP32進行加總(累加)。下列何者是其正確的理由?
- A因為乘法無法以FP32進行
- B因為在加總大量乘積時,低精度會累積捨入誤差,使小的值消失,所以只有累加以高精度進行
- C因為加法無法以FP16進行
查看答案與解析
正確答案:B. 因為在加總大量乘積時,低精度會累積捨入誤差,使小的值消失,所以只有累加以高精度進行
FP16的尾數只有10位元,因此將小的乘積加到已變大的總和上時,乘積可能因捨入而消失。在矩陣乘積中要加總數千個乘積,這個誤差一累積,結果就會大幅偏離。因此記憶體用量與運算單元負擔較大的乘法以低精度進行,只有累加以FP32進行。多數張量核心能以一個指令完成這種形式的乘加。
- A. FP32也能做乘法,但較慢且耗電較多。
- B. 正確。這是兼顧速度與精度的做法。
- C. FP16也能做加法,但誤差會變大。