当前位置:  开发笔记 > 编程语言 > 正文

Java中GPGPU/CUDA/OpenCL的最佳方法?

如何解决《Java中GPGPU/CUDA/OpenCL的最佳方法?》经验,为你挑选了5个好方法。

图形处理单元(GPGPU)上的通用计算是一种非常有吸引力的概念,可以利用GPU的强大功能进行任何类型的计算.

我喜欢使用GPGPU进行图像处理,粒子和快速几何操作.

现在看来,这个领域的两个竞争者似乎是CUDA和OpenCL.我想知道:

OpenCL在Windows/Mac上是否可以从Java使用?

有哪些库与OpenCL/CUDA接口?

是否直接使用JNA?

我忘记了什么吗?

任何真实世界的经验/例子/战争故事都值得赞赏.



1> zOlive..:

AFAIK,JavaCL/OpenCL4Java是目前所有平台上唯一可用的OpenCL绑定(包括MacOS X,FreeBSD,Linux,Windows,Solaris,全部采用Intel 32,64位和ppc变体,这要归功于它使用JNA).

它至少在Mac和Windows上实现了从Java Web Start运行良好的演示(为避免Linux上的随机崩溃,请参阅此Wiki页面,例如此Particles Demo.

它还带有一些实用程序(GPGPU随机数生成,基本并行缩减,线性代数)和Scala DSL.

最后,它是最古老的绑定(自2009年6月起),它有一个活跃的用户社区.

(免责声明:我是JavaCL的作者:-))


@Karl哦对不起,我打破了JNLP(JAR最近改了名字)!现在已经修好了,希望你能再试一次......(并且跨平台:它在所有平台上都被打破了;-))
最近Java 7安全性的紧缩导致粒子演示Web Start因异常而失败.

2> 小智..:

您也可以考虑Aparapi.它允许您使用Java编写代码,并尝试在运行时将字节码转换为OpenCL.

全面披露.我是Aparapi开发人员.



3> Ivan..:

好的CUDA是对C的修改,要编写CUDA内核,你必须用C编写代码,然后使用nvidia的CUDA编译器编译成可执行的形式.然后可以使用JNI将生成的本机代码与Java链接.从技术上讲,你无法从Java编写内核代码.有JCUDA http://www.jcuda.de/jcuda/JCuda.html,它为您提供cuda的一般内存/设备管理api和一些用CUDA和JNI包装的Java方法(FFT,一些线性代数方法) ..等等..).

另一方面,OpenCL只是一个API.OpenCL内核是传递给API的普通字符串,因此使用Java中的OpenCL,您应该能够指定自己的内核.可以在http://www.jocl.org/找到适用于Java的OpenCL绑定.


如果您的平台支持JNA(http://jna.dev.java.net),我会使用它来调用本机代码,因为它比编写JNI库要少得多.

4> halfwarp..:

我一直在使用JOCL,我很高兴.

OpenCL相对于CUDA的主要缺点(至少对我而言)是缺少可用的库(Thrust,CUDPP等).然而,CUDA可以很容易地移植到OpenCL,并且通过查看这些库如何工作(算法,策略等)实际上是非常好的,因为你学到了很多东西.



5> 小智..:

我知道现在已经很晚了,看看这个:https://github.com/pcpratts/rootbeer1

我没有使用它,但似乎比其他解决方案更容易使用.

从项目页面:

Rootbeer比CUDA或OpenCL Java语言绑定更先进.使用绑定,开发人员必须将对象的复杂图形序列化为基本类型的数组.使用Rootbeer,这是自动完成的.此外,对于语言绑定,开发人员必须在CUDA或OpenCL中编写GPU内核.使用Rootbeer,可以完成Java Bytecode的静态分析(使用Soot),并自动生成CUDA代码.

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有