我將開始一個項目使用並行處理,我想知道如果我會從使用Java線程或從Cuda編程獲得更多的優化?另外我不是這兩種方案的專家,哪條路線的學習曲線更小?Java線程或Cuda線程
回答
簡短的回答:這取決於你正試圖解決的問題。
長的答案:
有Java和CUDA並行處理之間的一些非常根本性的分歧。一個很大的不同是作業如何打包和執行。在Java中,您將編寫一個加載數據的程序,然後您將使用類似於ExecutorService的內容來執行您的任務。在Cuda中,您將加載數據,但是然後編寫一段代碼實際執行(在Cuda中稱爲內核)。聽起來很相似,對嗎?但不是真的。 Cuda涉及額外的內存開銷。 GPU的內存有限,所以你的軟件必須首先加載數據,然後將其作爲內核的一部分打包,然後發送給GPU,然後GPU存儲數據並執行計算。然後你的應用程序必須檢索結果。這對於一些計算問題非常有效,但對於其他計算問題實際上效率低下。這完全取決於你想要完成的事情。
如果您需要執行多次簡單任務(數千或更多),則GPU非常有用您可以使用OpenCL訪問GPU。這是一個Java包裝是http://www.jocl.org/其他是http://jogamp.org/jocl/www/和http://code.google.com/p/nativelibs4java/wiki/OpenCL但我還沒有嘗試過。
對於通用編程,CPU要好得多。您可能會感到驚訝,您可以在單線程中完成多少工作,更不用說在具有多個內核的Socket上。
OpenGL不推薦用於GPU的通用編程... – harrism 2012-02-10 02:38:26
我不會推薦用於通用計算的GPU。你能爲Java推薦更好的庫嗎? – 2012-02-10 08:04:47
- 1. cuda線程
- 2. CUDA線程線性索引
- 3. CUDA線程分配
- 4. CUDA線程內環
- 5. CUDA線程分配
- 6. cuda線程和塊
- 7. CUDA線程通信
- 8. CUDA線程閒置
- 9. CUDA並行線程
- 10. Cuda塊或線程首選項
- 11. CUDA線程如何分成經線?
- 12. 要線程或不線程
- 13. java線程 - 守護線程?
- 14. Java線程(多線程)
- 15. CUDA線程執行順序
- 16. CUDA線程本地數組
- 17. 讓使用CUDA線程
- 18. CUDA線程和循環
- 19. cuda線程在循環
- 20. Cuda單線程調試
- 21. CUDA 2D,3D線程塊
- 22. CUDA不啓動線程?
- 23. 在CUDA中重用線程
- 24. CUDA如何安排線程
- 25. CUDA線程如何工作
- 26. java編程和java單線程多線程問題(單線程與多線程)
- 27. 清理線程/後臺線程或過程/服務在Java
- 28. 多線程或線程進程
- 29. Python中的線程 - 線程或進程?
- 30. Java中的睡眠線程或進程
我不知道Cuda,但是當我認爲Java和並行處理時,我認爲Scala和/或Akka。 – theglauber 2012-02-09 18:33:02
什麼樣的應用程序?哪個平臺?什麼是問題域?涉及的工作規模是什麼? – yadab 2012-02-09 18:34:16
我也不知道能夠從JVM訪問GPU。 – Luciano 2012-02-09 18:35:03