2010-08-02 93 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. 睡眠在显示器内

这意味着您可以使用任意的对象图与复合类型。