【问题标题】:How do JavaCL and JogAmp JOCL compare?JavaCL 和 JogAmp JOCL 如何比较?
【发布时间】:2011-06-06 16:52:38
【问题描述】:

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/

【问题讨论】:

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


    【解决方案1】:

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

    除了基于 JNA 的版本之外,JavaCL 还拥有一个完全在 BSD 下获得许可的全功能 BridJ 端口(因为 BridJ 本身是 BSD 许可的)。

    仅供参考BridJ 提供比 JNA 显着更低的每次调用开销,接近 JNI 性能,同时仍然非常便携(它目前发布了适用于 Windows、Linux 和 MacOS X 的 32 位和 64 位二进制文​​件,但其他平台正在计划中)。

    不过,低级绑定的性能并不是唯一需要考虑的因素。虽然 JavaCL 和 JOCL 的面向对象 API 看起来很相似,但您必须注意额外的好处。我不知道 JOCL,但 JavaCL 附带:

    • 来自 Java 类路径或任何 URL 的文件的透明 #include
    • 程序二进制文件的自动和透明缓存
    • 还原实用程序
    • 线性代数工具
    • 一个随机数生成器(一个库,不是演示!)
    • 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 更快地进行低级调用。

    编辑:现在 Matthew Scarpino 的 OpenCL in Action 书中有一章介绍了 JavaCL。

    【讨论】:

    • 在这个小故事中,JavaCL 的第一个版本在任何 OpenCL 实现公开发布之前就已经可用了。我这样做只是为了好玩,作为测试 JNAerator (code.google.com/p/jnaerator) 的一种手段,然后意识到它实际上可能很有用(而且速度足够快,可以在游戏中使用 :-))
    • 此外,JavaCL 允许您在 OpenCL 内核中编写 #include 语句,这些语句引用 Java 类路径中的文件(甚至在 JAR 中!),我认为这是迄今为止的独家功能。
    • 我发现 JavaCL 最容易启动和运行,也是迄今为止功能最全的。
    • JavaCL 是否支持 OpenCL 1.0 驱动程序?
    • @JohnIdol JavaCL 主要使用 OpenCL 1.0 驱动程序开发和测试 :-)
    【解决方案2】:

    Raquel Medina Dominguez 为他的“Ingeniería en Informática”学位写了一篇题为“Evaluating different Java bindings for OpenCL”的论文。本文比较了 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 页。

    【讨论】:

      【解决方案3】:

      JOCL 的设计与 JOGL 或 JOAL 非常相似,并且(与所有 http://jogamp.org 项目一样)在构建时直接从 OpenCL 规范头文件生成。这就是我们在两个级别上公开 API 的原因:1:1 规范符合低级别绑定和手写的不那么冗长的高级绑定。基于 JNI 的绑定是静态的,并且针对最小的运行时开销进行了优化。我们为所有常见的 os-arch 组合提供(经过测试的)构建,很快还会为一些移动设备提供。

      Marco Hutter 的 JOCL.org 也是基于 JNI,但完全是手写的,而且级别相当低(如前所述)。

      最好的问候,

      -michael(JOCL 负责人,JOGL 维护者)

      【讨论】:

      • 但是 OP 不是询问 JavaCL 而不是 JOCL.org 吗?
      • 是的。这就是为什么我只用一句话简单地提到了 jocl.org,因为我不想把它漏掉。
      • 但是你没有解决JavaCL;令人困惑。但是很好的信息,谢谢。
      • P.S.,因为我有你的耳朵,我发现的 JOGAMP/JOCL 文档页面将我指向一个我无法连接的旧 Git 服务器。最终我找到了关于迁移到 GitHub 的参考,但也许文档需要更新?
      • github.com/mbien/jocl 是主仓库,但是有多个镜像,所以您可能遇到了一个暂时离线的镜像。
      猜你喜欢
      • 2012-06-28
      • 1970-01-01
      • 1970-01-01
      • 2013-11-20
      • 2017-10-08
      • 2019-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多