2010-08-02 94 views
29

是否可以在Java中進行GPU編程? 我的意思是沒有使用本地庫。Java GPU編程

當我們切換到GPU的性能改進可以預期多少?

編輯:

我不看遊戲編程,我想要做的硬核數字運算。

+1

你的意思是用Java編寫的着色器程序?或者使用Java將用着色器語言(GLSL或HLSL)編寫的着色器加載到GPU上並運行它? AFAICT,沒有任何Java-> GPU字節碼編譯器(或者從Java字節碼到GPU字節碼的轉換器),所以你不能用Java編寫你的GPU程序。 – 2010-08-02 04:43:36

+0

嘿,夥計們,你已經拋出了我不知道的關鍵詞!就像我不知道底紋語言是什麼,但經過快速的谷歌搜索後發現的。好的基於你的回覆我要編輯 – 2010-08-02 07:22:30

回答

11

是的。 Java3D,LWJGL和JOGL支持GLSL(OpenGL着色語言)。

編輯:
如果您想在GPU上執行平臺無關的通用計算,可以使用OpenCL。通過該框架,您可以編寫能夠以相同方式處理所有處理單元的代碼,儘管功能集和執行環境差異很大。儘管如此,與Java相比,這是非常低級的編程。

看來你的理想是使用OpenCL支持編寫的JVM。在網上搜索時,我發現對這個想法有點興趣,但沒有任何主要支持的證據。

一個多大的性能提升可以期待

這取決於你在運行和什麼樣的數據,你處理系統(矩陣,向量運算是在GPU上非常有效的)。你可能會在像我這樣的系統上獲得一些主要的收益,擁有兩個強大的GPU和一個適度的單核CPU。然而,在一臺擁有適度GPU和四核CPU的計算機上,性能提升可能很難克服開銷。

+5

他可能在尋找JOCL。 http://www.jocl.org/ – 2010-08-02 04:37:37

+1

JOCL教程:http://www.codeproject.com/KB/recipes/opencl-part1.aspx – rwong 2010-08-02 05:12:16

+1

另請看[rootbear] https://github.com/pcpratts/ rootbeer1/ – 2012-08-13 18:48:39

2

如果您還在考慮硬芯數的GPU在Java中搗鼓不使用本機庫,你可能會感興趣這個博客文章http://ateji.blogspot.com/2011/02/java-on-gpu-with-ateji-px.html 我們(我是借字團隊的一部分)已經看到高達60倍左右的性能通過遠遠在可以大規模並行化的Java應用程序上。

+0

我在你的鏈接的博客上發佈了一個問題。真的很想擁有這樣的功能。 – 2011-03-06 22:34:32

5

Rootbeer1剛剛發佈在GitHub上:https://github.com/pcpratts/rootbeer1

隨着Rootbeer您可以使用幾乎任何Java除了下面的程序:

  1. 本地方法和字段
  2. 反射
  3. 動態方法調用
  4. 垃圾回收
  5. 睡眠在顯示器內

這意味着您可以使用任意的對象圖與複合類型。