通用图形处理器上的通用计算(GPGPU)是一种非常有吸引力的概念,可以利用GPU的强大计算能力进行任何类型的计算。
我希望使用GPGPU进行图像处理、粒子和快速几何运算。
现在,在这个领域中似乎有两个竞争者:CUDA和OpenCL。我想知道:
- 在Windows/Mac上,Java是否已经可以使用OpenCL?
- 与OpenCL/CUDA接口的库有哪些方式?
- 直接使用JNA是否可行?
- 我有遗漏的地方吗?
任何实际经验/示例/战斗经历都将不胜感激。
通用图形处理器上的通用计算(GPGPU)是一种非常有吸引力的概念,可以利用GPU的强大计算能力进行任何类型的计算。
我希望使用GPGPU进行图像处理、粒子和快速几何运算。
现在,在这个领域中似乎有两个竞争者:CUDA和OpenCL。我想知道:
任何实际经验/示例/战斗经历都将不胜感激。
你也可以考虑Aparapi。它允许你用Java编写代码,并尝试在运行时将字节码转换为OpenCL。
全面披露,我是Aparapi的开发人员。
我一直在使用JOCL,并且对它非常满意。
OpenCL相对于CUDA的主要劣势(至少对我而言)是缺乏可用的库(如Thrust、CUDPP等)。但是,CUDA可以很容易地移植到OpenCL,并通过查看这些库的工作方式(算法、策略等),你实际上可以学到很多东西。
我知道现在已经很晚了,但请看一下这个链接:https://github.com/pcpratts/rootbeer1
虽然我没有使用过它,但它似乎比其他解决方案更容易使用。
从项目页面来看:
Rootbeer比CUDA或OpenCL Java语言绑定更高级。使用绑定时,开发人员必须将复杂的对象图序列化为原始类型的数组。使用Rootbeer可以自动完成此操作。而且,在使用语言绑定时,开发人员必须使用CUDA或OpenCL编写GPU内核。使用Rootbeer会对Java字节码进行静态分析(使用Soot),并自动生成CUDA代码。