2011-04-14 109 views
1

幾乎所有的CUDA示例代碼都描述了在大型數據集上執行近原子操作。每個線程可以執行的問題的大小有哪些實際限制?CUDA:線程中的更大問題

例如,我在另一個question打開時涉及每線程矩陣求解。這種事情太大了,不能放在每個線程中?

回答

3

CUDA是一個數據並行編程模型實際上是SIMD體系結構,顯然它不像通用多線程或MIMD體系結構那樣靈活。當然,內核可能比簡單的算術運算複雜得多。

在我自己的工作中,我使用CUDA來解決偏微分方程(所以有限元,有限差分和有限體積方法),每個線程處理離散連續體中的單元或元素。在這種計算中,每個單元/單元的每個線程有很多FLOP。

要注意的關鍵是分支分歧。因爲它是一個SIMD體系結構,所以在線程(實際上是SIMD寬度)的變形中有很多分支的代碼將受到性能損失。但分支分歧和代碼複雜性不一定是同義詞,只要任何給定warp內的線程不會過於頻繁地分叉,就可以編寫非常「分支」和「loopy」的代碼,從而運行良好。在FLOP和IOP重算法中,這通常不太難實現。

+1

感謝您的所有CUDA幫助,如果您遇到過一位年輕的愛爾蘭禿頭的年輕人,請問他是否欠你一瓶啤酒,我是這麼做的。幸運的是,矩陣解決方案是線程計算中最複雜的一個部分,我已經消除了所有非邊界情況,如果這樣的話,那麼經線分歧不應該成爲問題。從C數值食譜看Clout分解,當我得到一些工作將更新其他問題。 – Bolster 2011-04-14 15:29:10

1

我只是想重申talonmies,並說在操作數量上內核的「大小」沒有真正的限制。只要計算是平行的,CUDA就會有效!

至於實際的考慮,我只想補充一些小筆記

  • 長期運行的內核可以超時,這取決於操作系統(或cudaProf profiling的時候)。您可能必須在某處更改設置以增加最大內核執行時間。
  • 沒有專用GPU的系統上長時間運行的內核可能會凍結顯示(中斷UI)。
  • warp異步執行 - 一個warp可以訪問內存,而另一個warp可以執行算術運算以有效使用時鐘週期。長期運行的內核可能更多地受益於這種優化。我不確定這最後一個。
+0

感謝您的評論,但如果沒有成功的個人資料,人們會如何評估? – Bolster 2011-04-16 15:09:25

+0

@ andrew-boster你是什麼意思?您當然可以配置長時間運行的內核,您只需更改cudaprof中的內核超時設置即可 – jmilloy 2011-04-16 15:42:22