我將嘗試通過使用CUDA優化用MATLAB編寫的一些代碼。我最近開始編程CUDA,但我對它的工作原理有了一個總體的瞭解。CUDA和MATLAB for循環優化
所以,說我想添加兩個矩陣在一起。在CUDA中,我可以編寫一個算法,利用線程計算結果矩陣中每個元素的答案。但是,這種技術可能與MATLAB已經做的很相似嗎?在那種情況下,效率是否獨立於技術並且僅僅歸因於硬件水平?
我將嘗試通過使用CUDA優化用MATLAB編寫的一些代碼。我最近開始編程CUDA,但我對它的工作原理有了一個總體的瞭解。CUDA和MATLAB for循環優化
所以,說我想添加兩個矩陣在一起。在CUDA中,我可以編寫一個算法,利用線程計算結果矩陣中每個元素的答案。但是,這種技術可能與MATLAB已經做的很相似嗎?在那種情況下,效率是否獨立於技術並且僅僅歸因於硬件水平?
該技術可能相似,但請記住CUDA中有數百個線程同時運行。如果MATLAB正在使用線程,並且這些線程正在四核上運行,那麼每個時鐘週期只能執行4個線程,而在相同的時鐘週期內,您可能需要幾百個線程才能在CUDA上運行。
所以要回答你的問題,是的,這個例子中的效率與技術無關,僅僅歸因於硬件。
我不會驚訝地發現加速 - 事實上,期望它給予輸入大小是值得的開銷。但是,我的觀點是算法本身(即並行計算每個元素的加法)不會影響加速,而與硬件無關。 – dnbwise 2010-12-09 21:59:41
答案毫不含糊,所有的效率都是硬件水平。我不知道matlab的工作原理,但CUDA的優點是可以同時執行多線程,與matlab不同。
請注意,如果問題很小或者需要很多讀寫操作,CUDA可能只會是一個額外的麻煩。
推測,MATLAB使用虛擬機級別的多個線程。 – dnbwise 2010-12-09 22:35:03
CUDA對matlab有官方支持。
[需要鏈接]
您可以使用MEX文件從MATLAB GPU上運行。
瓶頸是數據從CPU-RAM傳輸到GPU的速度。所以如果轉移最小化並以大塊完成,加速很好。
對於簡單的事情,最好在Matlab PCT中使用gpuArray支持。你可以在這裏檢查它 http://www.mathworks.de/de/help/distcomp/using-gpuarray.html
對於添加gpuArrays,乘法,分鐘,最大等等,他們使用的實現往往是好的。我確實發現,爲了像abs(y-Hx)這樣的小矩陣的批處理操作。^ 2,你最好寫一個小內核來爲你做。
將MathWorks的解決方案與第三方工具和手工製作的CUDA進行比較可能會很有趣。 http://developer.nvidia.com/object/matlab_cuda.html – zellus 2010-12-09 22:12:15