JavaCL和JogAmp JOCL有何区别?

17
JavaCL使用JNA,JOCL则使用JNI。因此,我预期JavaCL将显示更好的跨平台兼容性,而JOCL通常应该具有更好的性能。 JOCL与JOGL2一起进行测试,这应该使在CL中使用GL对象和反之亦然变得容易。JavaCL能够从当前GL上下文生成其上下文。 JavaCL受GPL保护,JOCL在BSD许可下分发。
还有什么关于这两种方法可以说的吗?有任何好的比较吗?
JavaCL:http://code.google.com/p/javacl/ JOCL:http://jogamp.org/jocl/www/
3个回答

9

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

除了基于JNA的版本外,JavaCL还有一个完全功能的BridJ端口,其完全遵循BSD许可证(因为BridJ本身就是BSD许可证)。

顺便说一下,BridJ的每次调用开销比JNA低得多,接近JNI的性能,同时非常易移植(目前已发布32位和64位二进制文件,支持Windows、Linux和MacOS X,但计划支持其他平台)。

然而,低级绑定的性能并不是唯一需要考虑的因素。虽然JavaCL和JOCL的面向对象API看起来相似,但你需要关注额外的好处。我不知道JOCL,但JavaCL附带以下内容:

  • 从Java类路径或任何URL透明地#include文件
  • 程序二进制文件的自动和透明缓存
  • 缩减实用程序
  • 线性代数工具
  • 一个随机数生成器(库,而不是演示!)
  • 一个漂亮的GUI,可在几秒钟内尝试图像转换内核
  • 一个maven插件,解析OpenCL内核(位于src/main/opencl中),并生成每个内核一个类型化Java方法的类型化程序类(在编译时强制执行参数列表的正确性)

JavaCL还被ScalaCL(通用OpenCL支持的集合+ Scala编译器插件以优化代码)使用,这是一种避免编写任何内核的好方法(虽然仍在积极开发中,截至本文撰写时间)。

另一个要考虑的事情是标准平台(至少是Windows,Linux和MacOS X)的易用二进制文件和集成到构建系统(如Maven)。在我看来,JavaCL曾经是最好的,但事情可能已经改变了(肯定会改变)。

最后,Marco Hutter的JOCL是另一个OpenCL绑定,但没有高级API。对于低级调用,它可能比JavaCL或JOCL更快。

编辑:《OpenCL in Action》一书中现在包含了JavaCL的章节。


2
小故事一下,JavaCL的第一个版本在任何OpenCL实现公开发布之前就已经可用了。我只是为了测试JNAerator(http://code.google.com/p/jnaerator/)而做了这个有趣的东西,然后意识到它实际上可能很有用(并且足够快以参与竞争 :-)) - zOlive
1
此外,JavaCL 允许您在 OpenCL 内核中编写 #include 语句,这些语句引用 Java 类路径中的文件(甚至是 JAR 中的文件!),我认为这是一个独特的功能。 - zOlive
6
到目前为止,我发现JavaCL最容易启动和运行,并且功能最齐全。 - Chinasaur
1
JavaCL是否支持OpenCL 1.0驱动程序? - JohnIdol
2
@JohnIdol JavaCL主要是使用OpenCL 1.0驱动程序进行开发和测试的 :-) - zOlive
感谢您公正的回答,@zOlive。 :) - Qix - MONICA WAS MISTREATED

9
Raquel Medina Dominguez撰写了一篇题为“评估不同Java绑定OpenCL”的论文,作为他的“Ingeniería en Informática”学位。本文比较了JogAmp JOCL、JOCL和JavaCL三个项目在性能、易用性和内存消耗方面的得分。该论文包括设置说明,可帮助您开始使用任何三个Java OpenCL绑定实现之一。
链接:http://e-archivo.uc3m.es/handle/10016/17183?locale=en - 评估不同Java绑定OpenCL PDF: http://e-archivo.uc3m.es/bitstream/10016/17183/5/finalversionPFC_Raquel_Medina.pdf 结论见第40页。

6
JOCL在设计上与JOGL或JOAL非常相似,是(像所有http://jogamp.org项目一样)在构建时直接从OpenCL规范头文件中生成的。这就是为什么我们将API公开在两个级别上:1:1规范符合的低级绑定和手写的高级绑定,远不如前者冗长。基于JNI的绑定是静态的,并且针对最小运行时开销进行了优化。我们提供了所有常见操作系统-体系结构组合的(经过测试的)构建,并很快也会为一些移动设备提供构建。
Marco Hutter的JOCL.org也是基于JNI的,但完全是手写的,而且相当低级(如之前所述)。
此致,
-迈克尔(JOCL负责人,JOGL维护人员)

但是OP不是在问JavaCL而不是JOCL.org吗? - Chinasaur
是的。这就是为什么我只在一句话中简要提到了jocl.org,因为我不想把它漏掉。 - mbien
2
但是你没有提到JavaCL,有点令人困惑。不过信息很好,谢谢。 - Chinasaur
1
顺便说一句,既然有您的关注,我发现的JOGAMP/JOCL文档页面指向了一个我无法连接的旧Git服务器。最终我找到了有关事物转移到GitHub的参考资料,但也许需要更新文档? - Chinasaur
1
http://github.com/mbien/jocl 是主要的代码库,但有多个镜像,所以你可能遇到了一个暂时离线的镜像。 - mbien

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