2014-02-24 24 views
2

我正在考慮將一些數學操作卸載到GPU。由於我已經在使用D3D11,我會使用計算着色器來完成這項工作。但事實是,無論用戶使用什麼GPU,我都需要相同輸入的結果。 (只要求它支持計算着色器4.0)。GPU和確定性

那麼浮點數學在GPU上是確定性的嗎?

如果不是,GPUs是否支持整數數學?

回答

1

我還沒有使用過DirectCompute,只有OpenCL。


GPU絕對支持32位和64位整數的整數運算。一對夫婦的問題,已經有這樣的討論:

基本上,在現代GPU的32位浮點和整數運算是在性能相當於。


至於確定性結果,它取決於你的代碼。例如,如果您依賴多個線程在同一內存上執行原子操作,然後從其他線程讀取該內存並根據該值執行操作,則結果可能每次都不完全相同。

根據個人經驗,我需要生成隨機數,但也需要一致的結果。所以基本上我有一大堆種子,每個線程一個,每個都是完全獨立的。其他依賴原子操作和屏障的隨機數發生器不會有。

具有確定性結果的另一半在給定不同硬件的情況下具有相同的結果。用整數運算你應該是相當安全的。藉助OpenCL中的浮點運算,避免快速輕鬆的數學選項和本地函數變體將增加在不同硬件上獲得相同結果的機會。