幾乎所有的CUDA示例代碼都描述了在大型數據集上執行近原子操作。每個線程可以執行的問題的大小有哪些實際限制?CUDA:線程中的更大問題
例如,我在另一個question打開時涉及每線程矩陣求解。這種事情太大了,不能放在每個線程中?
幾乎所有的CUDA示例代碼都描述了在大型數據集上執行近原子操作。每個線程可以執行的問題的大小有哪些實際限制?CUDA:線程中的更大問題
例如,我在另一個question打開時涉及每線程矩陣求解。這種事情太大了,不能放在每個線程中?
CUDA是一個數據並行編程模型實際上是SIMD體系結構,顯然它不像通用多線程或MIMD體系結構那樣靈活。當然,內核可能比簡單的算術運算複雜得多。
在我自己的工作中,我使用CUDA來解決偏微分方程(所以有限元,有限差分和有限體積方法),每個線程處理離散連續體中的單元或元素。在這種計算中,每個單元/單元的每個線程有很多FLOP。
要注意的關鍵是分支分歧。因爲它是一個SIMD體系結構,所以在線程(實際上是SIMD寬度)的變形中有很多分支的代碼將受到性能損失。但分支分歧和代碼複雜性不一定是同義詞,只要任何給定warp內的線程不會過於頻繁地分叉,就可以編寫非常「分支」和「loopy」的代碼,從而運行良好。在FLOP和IOP重算法中,這通常不太難實現。
我只是想重申talonmies,並說在操作數量上內核的「大小」沒有真正的限制。只要計算是平行的,CUDA就會有效!
至於實際的考慮,我只想補充一些小筆記
感謝您的所有CUDA幫助,如果您遇到過一位年輕的愛爾蘭禿頭的年輕人,請問他是否欠你一瓶啤酒,我是這麼做的。幸運的是,矩陣解決方案是線程計算中最複雜的一個部分,我已經消除了所有非邊界情況,如果這樣的話,那麼經線分歧不應該成爲問題。從C數值食譜看Clout分解,當我得到一些工作將更新其他問題。 – Bolster 2011-04-14 15:29:10