GPU程式設計

在GPU的混合精度計算中,常以FP16等低精度進行乘法,而以FP32進行加總(累加)。下列何者是其正確的理由?

  1. A因為乘法無法以FP32進行
  2. B因為在加總大量乘積時,低精度會累積捨入誤差,使小的值消失,所以只有累加以高精度進行
  3. C因為加法無法以FP16進行
查看答案與解析

正確答案:B. 因為在加總大量乘積時,低精度會累積捨入誤差,使小的值消失,所以只有累加以高精度進行

FP16的尾數只有10位元,因此將小的乘積加到已變大的總和上時,乘積可能因捨入而消失。在矩陣乘積中要加總數千個乘積,這個誤差一累積,結果就會大幅偏離。因此記憶體用量與運算單元負擔較大的乘法以低精度進行,只有累加以FP32進行。多數張量核心能以一個指令完成這種形式的乘加。

  • A. FP32也能做乘法,但較慢且耗電較多。
  • B. 正確。這是兼顧速度與精度的做法。
  • C. FP16也能做加法,但誤差會變大。
練習這個領域 前往領域頁面

GPU程式設計的其他題目

  1. 以GPU求取相同資料的浮點數總和時,每次執行結果的最後一位數都略有不同。下列何者是最可能的原因?
  2. 在CUDA中決定每個區塊的執行緒數量時,下列何者是正確的一般準則?
  3. 以上述的迴圈(網格步幅迴圈,grid-stride loop)撰寫核心函式的優點,下列何者正確?
  4. CUDA的常數記憶體(constant memory)在何種存取時運作得特別快?
  5. 關於GPU的快取,與CPU相比的一般特徵,下列何者正確?

這個領域的比較