GPU程式設計
以GPU求取相同資料的浮點數總和時,每次執行結果的最後一位數都略有不同。下列何者是最可能的原因?
- A因為GPU的運算單元壞了
- B因為資料在GPU內每次都被改寫
- C因為原子運算等使相加的順序每次執行都不同,而浮點數的加法會因順序不同而使捨入結果改變
查看答案與解析
正確答案:C. 因為原子運算等使相加的順序每次執行都不同,而浮點數的加法會因順序不同而使捨入結果改變
浮點數的加法每次都會發生捨入,因此(a+b)+c與a+(b+c)的結果可能略有不同。在並行的總和中,哪個執行緒的值以什麼順序被相加,會隨執行緒的執行順序或原子運算抵達的順序而改變。結果就是最後一位數每次執行都不同。若希望每次結果都相同,可使用固定相加順序的歸約。
- A. 這是即使沒有壞掉也會發生的正常現象。
- B. 資料並沒有改變。
- C. 正確。浮點數的加法不滿足結合律。