2012-02-09 127 views
1

我將開始一個項目使用並行處理,我想知道如果我會從使用Java線程或從Cuda編程獲得更多的優化?另外我不是這兩種方案的專家,哪條路線的學習曲線更小?Java線程或Cuda線程

+0

我不知道Cuda,但是當我認爲Java和並行處理時,我認爲Scala和/或Akka。 – theglauber 2012-02-09 18:33:02

+3

什麼樣的應用程序?哪個平臺?什麼是問題域?涉及的工作規模是什麼? – yadab 2012-02-09 18:34:16

+0

我也不知道能夠從JVM訪問GPU。 – Luciano 2012-02-09 18:35:03

回答

4

簡短的回答:這取決於你正試圖解決的問題。

長的答案:

有Java和CUDA並行處理之間的一些非常根本性的分歧。一個很大的不同是作業如何打包和執行。在Java中,您將編寫一個加載數據的程序,然後您將使用類似於ExecutorService的內容來執行您的任務。在Cuda中,您將加載數據,但是然後編寫一段代碼實際執行(在Cuda中稱爲內核)。聽起來很相似,對嗎?但不是真的。 Cuda涉及額外的內存開銷。 GPU的內存有限,所以你的軟件必須首先加載數據,然後將其作爲內核的一部分打包,然後發送給GPU,然後GPU存儲數據並執行計算。然後你的應用程序必須檢索結果。這對於一些計算問題非常有效,但對於其他計算問題實際上效率低下。這完全取決於你想要完成的事情。

0

如果您需要執行多次簡單任務(數千或更多),則GPU非常有用您可以使用OpenCL訪問GPU。這是一個Java包裝是http://www.jocl.org/其他是http://jogamp.org/jocl/www/http://code.google.com/p/nativelibs4java/wiki/OpenCL但我還沒有嘗試過。

對於通用編程,CPU要好得多。您可能會感到驚訝,您可以在單線程中完成多少工作,更不用說在具有多個內核的Socket上。

+0

OpenGL不推薦用於GPU的通用編程... – harrism 2012-02-10 02:38:26

+0

我不會推薦用於通用計算的GPU。你能爲Java推薦更好的庫嗎? – 2012-02-10 08:04:47