JavaCL和JogAmp JOCL如何比较?

时间:2011-01-10 18:12:03

标签: java opengl java-native-interface opencl jna

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 个答案:

答案 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附带:

  • 透明#include来自Java类路径或任何URL的文件
  • 程序二进制文件的自动和透明缓存
  • 简化实用程序
  • linear algebra utils
  • 随机数生成器(库,不是演示!)
  • a nice GUI to experiment with image transform kernels within seconds
  • 一个maven插件,解析OpenCL内核(在src / main / opencl中找到)并生成每个内核使用一个类型化Java方法的类型化程序类(在编译时强制执行参数列表的正确性)

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维护者)