Java GPU编程

29

能否在Java中进行GPU编程?

我的意思是不使用本地库。

当我们切换到GPU时,可以期望多大的性能提升?

编辑:

我不是在寻找游戏编程,我想做硬核数字计算。


1
你的意思是用Java编写着色器程序吗?还是使用Java将用着色器语言(GLSL或HLSL)编写的着色器加载到GPU上并运行?据我所知,没有Java-> GPU字节码编译器(或从Java字节码转换为GPU字节码的转换器),因此您无法使用Java编写GPU程序。 - Ben Voigt
嘿,大家好,你们提到了很多我不知道的关键词!!比如我不知道什么是着色语言,但是通过快速的谷歌搜索后找到了答案。根据你们的回复,我将进行编辑。 - Anand Sunderraman
4个回答

12

是的。Java3D,LWJGL和JOGL支持GLSL(OpenGL Shading Language)。

编辑:
如果您希望在GPU上进行平台中立的通用计算,可以使用OpenCL。这个框架允许您编写代码,将所有处理单元都视为相同,尽管功能集合和执行环境差异很大。但与Java相比,这是非常底层的编程。

看起来你理想的情况是一个支持OpenCL的JVM。在网上搜索,我发现了一些对这个想法的兴趣,但没有任何重要的支持证据。

有多少性能提升可以期待?

这取决于您运行的系统以及您正在处理的数据类型(矩阵和向量数学在GPU上非常高效)。您可能会在像我这样拥有两个强大GPU和适度单核CPU的系统上获得一些重大收益。然而,在一个配备适度GPU和四核CPU的计算机上,性能改进可能难以克服开销。


5
他可能在寻找JOCL。http://www.jocl.org/ - Ben Voigt
1
JOCL 教程:http://www.codeproject.com/KB/recipes/opencl-part1.aspx - rwong
1
还可以查看[rootbeer]https://github.com/pcpratts/rootbeer1/。 - Faisal Feroz

6

Rootbeer1刚刚在Github上发布:https://github.com/pcpratts/rootbeer1

使用Rootbeer,您可以使用几乎任何Java编程语言,除了以下内容:

  1. 本地方法和字段
  2. 反射
  3. 动态方法调用
  4. 垃圾回收
  5. 在监视器内部休眠

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


2
如果您仍在考虑在Java上进行硬核数值计算,而不使用本地库,那么您可能会对这篇博客文章感兴趣:http://ateji.blogspot.com/2011/02/java-on-gpu-with-ateji-px.html 我们(我是Ateji团队的一部分)已经看到了Java应用程序的性能提高了多达60倍,尤其是可以进行大规模并行化的应用程序。

我在你的博客中发布了一个问题。真的很想拥有这样的功能。 - Andreas Hornig

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接