我应该使用什么API来支持Java中的OpenCL。
我想知道这对性能最好
是否需要JavaCL将Java字节代码转换为OpenCL,或者仅使用Aparapi(AMD提供的API)就可以实现。
答案 0 :(得分:6)
据我所知,Aparapi是唯一一个提供从字节码自动转换OpenCL的框架。 RootBeer为CUDA提供了类似的选项。
如果您准备好调整OpenCL和/或知道如何利用OpenCL的一些更高级功能(本地内存,向量指令,重叠传输/调度),您可能会发现JavaCL或JOCL提供更多性能机会)。
具体来说,如果您希望应用多个OpenCL内核(比如在管道中),您可以使用JOCL / JavaCL更轻松地最小化主机和GPU之间的缓冲区传输。阿帕拉皮在这里缺乏灵活性。
但是,我希望(并观察到)大多数“简单”算法的性能在这三个框架之间非常相似。
我的建议(完全披露我是Aparapi发明人/初始撰稿人)将尝试Aparapi,如果你发现自己想要'调整'生成的OpenCL(Aparapi将允许你列出它生成的代码),或者找到你想要尝试重叠缓冲区/传输或多内核调度,您可以在获得更多经验时始终切换到JOCL / JavaCL。