GPU程式設計

以GPU求取相同資料的浮點數總和時,每次執行結果的最後一位數都略有不同。下列何者是最可能的原因?

  1. A因為GPU的運算單元壞了
  2. B因為資料在GPU內每次都被改寫
  3. C因為原子運算等使相加的順序每次執行都不同,而浮點數的加法會因順序不同而使捨入結果改變
查看答案與解析

正確答案:C. 因為原子運算等使相加的順序每次執行都不同,而浮點數的加法會因順序不同而使捨入結果改變

浮點數的加法每次都會發生捨入,因此(a+b)+c與a+(b+c)的結果可能略有不同。在並行的總和中,哪個執行緒的值以什麼順序被相加,會隨執行緒的執行順序或原子運算抵達的順序而改變。結果就是最後一位數每次執行都不同。若希望每次結果都相同,可使用固定相加順序的歸約。

  • A. 這是即使沒有壞掉也會發生的正常現象。
  • B. 資料並沒有改變。
  • C. 正確。浮點數的加法不滿足結合律。
練習這個領域 前往領域頁面

GPU程式設計的其他題目

  1. 在CUDA中決定每個區塊的執行緒數量時,下列何者是正確的一般準則?
  2. 以上述的迴圈(網格步幅迴圈,grid-stride loop)撰寫核心函式的優點,下列何者正確?
  3. CUDA的常數記憶體(constant memory)在何種存取時運作得特別快?
  4. 關於GPU的快取,與CPU相比的一般特徵,下列何者正確?
  5. 下列何者是NVIDIA以外的GPU也能使用、用於GPU等平行計算之程式設計機制的正確例子?

這個領域的比較