我將開始一個項目使用並行處理,我想知道如果我會從使用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. 要線程或不線程
- 9. Cuda單線程調試
- 10. CUDA 2D,3D線程塊
- 11. java線程 - 守護線程?
- 12. Java線程(多線程)
- 13. java編程和java單線程多線程問題(單線程與多線程)
- 14. 清理線程/後臺線程或過程/服務在Java
- 15. 多線程或線程進程
- 16. Python中的線程 - 線程或進程?
- 17. Java中的睡眠線程或進程
- 18. 線程或進程
- 19. Java線程程序
- 20. Java線程問題,使用Runnable或線程
- 21. Java線程和POSIX線程,用戶或內核級別?
- 22. 通過線程名稱或ThreadGroup名稱終止線程 - Java
- 23. 線程或DRb?
- 24. Java多線程 - 更少的線程或更少的線程做更多的線程?
- 25. Java Swing +線程
- 26. Java線程鎖
- 27. Java多線程
- 28. 在Java線程
- 29. Java ArrayList - 線程
- 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