JavaCL使用JNA,JOCL使用JNI,所以我希望JavaCL能够表现出更好的跨平台兼容性,而JOCL通常应该具有更好的性能。 JOCL与JOGL2一起进行测试,这样可以很容易地在CL中使用GL对象,反之亦然。 JavaCL能够从当前GL上下文生成其上下文。 JavaCL受GPL保护,JOCL根据BSD许可证分发。
关于这两种方法还能说些什么呢? 那里有没有比较好的比较?
答案 0 :(得分:8)
(免责声明:我是JavaCL和BridJ的作者)
除了基于JNA的版本之外,JavaCL还有一个全功能的BridJ端口,完全在BSD下获得许可(因为BridJ本身是BSD许可的)。
FYI BridJ提供的每次呼叫开销显着低于JNA,接近JNI性能,同时仍然非常便携(目前发布的Windows,Linux和MacOS X的32位和64位二进制文件,但其他平台计划)。
但是,低级绑定的性能并不是唯一要考虑的因素。虽然JavaCL和JOCL的面向对象的API看起来很相似,但您必须照顾额外的好东西。我不知道JOCL,但JavaCL附带:
ScalaCL(通用OpenCL支持的集合+ Scala编译器插件用于优化代码)也使用JavaCL,这是一种避免编写任何内核的好方法(虽然仍然处于繁重的开发阶段)写这篇文章)。
要考虑的另一件事是标准平台(至少是Windows,Linux和MacOS X)的二进制文件的轻松可用性以及与Maven等构建系统的集成。 JavaCL曾经是最好的恕我直言,但事情可能已经改变(肯定会改变)。
最后,Marco Hutter's JOCL是另一个OpenCL绑定,但没有高级API。但是,对于低级别调用,它可能比OpenCL4Java(JavaCL)或JOCL更快。
编辑:JavaCL现在由Matthew Scarpino的OpenCL in Action一书中的一章涵盖。
答案 1 :(得分:8)
Raquel Medina Dominguez为他的“IngenieríaInInformática”学位撰写了一篇题为“评估OpenCL的不同Java绑定”的论文。本文比较了JogAmp JOCL,JOCL和JavaCL。它对树项目的性能,易用性和内存消耗进行评分。 本文包含的设置说明将帮助您开始使用三种Java OpenCL绑定实现中的任何一种。
http://e-archivo.uc3m.es/handle/10016/17183?locale=en - 评估OpenCL的不同Java绑定 PDF:http://e-archivo.uc3m.es/bitstream/10016/17183/5/finalversionPFC_Raquel_Medina.pdf 第40页的结论。
答案 2 :(得分:6)
JOCL的设计与JOGL或JOAL非常相似,并且(就像所有http://jogamp.org项目一样)在构建时直接从OpenCL规范头文件生成。这就是为什么我们将API暴露在两个层面:1:1规范符合低级别绑定和手写的更简洁的高级绑定。基于JNI的绑定是静态的,并且针对最小的运行时开销进行了优化。我们为所有常见的os-arch组合提供(经过测试的)构建,并且很快也为一些移动设备提供。
Marco Hutter的JOCL.org也是基于JNI的,但完全是手写的,而且水平相当低(如前所述)。
最好的问候,
-michael(JOCL主管,JOGL维护者)