3

我应该使用什么 API 来支持 Java 中的 OpenCL。

我想知道这对性能最好

  1. JavaCL
  2. Aparapi(AMD 提供的 API)
  3. JOCL

是否需要 JavaCL 才能将 Java 字节码转换为 OpenCL,或者只是 Aparapi(AMD 提供的 API)可以做到。

4

1 回答 1

6

据我了解,Aparapi 是唯一提供从字节码自动转换 OpenCL 的框架。RootBeer 为 CUDA 提供了类似的选项。

WRT 性能如果您准备手动调整 OpenCL 和/或知道如何利用 OpenCL 的一些更高级功能(本地内存、向量指令、重叠传输/调度),您可能会发现 JavaCL 或 JOCL 提供更多性能机会。

具体来说,如果您希望应用多个 OpenCL 内核(例如在管道中),您可以使用 JOCL/JavaCL 更轻松地最小化主机和 GPU 之间的缓冲区传输。Aparapi 在这里缺乏一些灵活性。

但是,我希望(并且已经观察到)大多数“简单”算法的性能在这三个框架之间非常相似。

如果您发现自己想要“调整”生成的 OpenCL(Aparapi 将允许您列出它生成的代码),或者发现您想要进行实验,我的建议(完全披露我是 Aparapi 发明者/初始贡献者)将是尝试 Aparapi对于重叠的缓冲区/传输或多内核调度,当您获得更多经验时,您总是可以切换到 JOCL/JavaCL。

于 2013-04-22T20:49:43.557 回答