我對GPU編程頗爲陌生,但由於我有一個計算密集型任務,我已經轉向GPU尋求可能的性能提升。ArrayFire與原始CUDA編程?
我試圖重寫我的程序與ArrayFire Free版本。它確實比啓用了多線程的CPU例程更快,但是達不到我預期的程度(即,< 100%加速),並且返回的結果不太正確(<與CPU例程相比1%的錯誤,假設CPU例程的結果是正確的)。
我的任務主要是在大型矩陣(300MB-500MB大小)上的基於元素的float-32數學運算,很少有if/thens/switch-cases等。我猜測性能瓶頸可能是CPU和GPU之間的帶寬內存,因爲有很多數據讀取等。我測試的GPU是具有3GB視頻內存的GeForce 580GTX。
是否仍有一些優化顯著房間,如果我寫的原始代碼CUDA(與CUBLAS等和平均優化),而不是使用ArrayFire我的任務嗎?我閱讀了一些NVIDIA優化指南;似乎有一些內存訪問技巧可以加快數據訪問並減少銀行衝突。 ArrayFire會自動使用這些通用技巧嗎?
它們都不符合IEEE規範嗎?我假設在兩者上使用「單精度」應該產生相同的結果。同樣,假設計算的順序也是一樣的。 – Royi