【发布时间】:2014-05-30 23:07:03
【问题描述】:
根据我的经验,使用CUDA 编写的应用程序在相同的 NVidia 硬件上运行时比使用OpenCL 编写的应用程序运行得更快。
如何在不失去OpenCL 的跨平台功能的情况下利用此功能?
我怀疑有可能创建一个“故障回复”系统,如果没有可用的 NVidia 设备和/或没有请求内核的CUDA 版本,那么系统将故障回复为使用OpenCL 版本.或者,大型任务可以在 NVidia 和非 NVidia 硬件之间进行负载平衡。理想情况下,这样的应用程序需要是跨平台的,并且还可以在没有 NVidia 硬件的机器上运行。
据我所知,这归结为能够将CUDA 支持用作动态库 (dll/.so)。我已经在使用JOCL 访问OpenCL,但我不知道如何绑定到使用CUDA 生成的内核,因为我能找到的所有示例都是独立应用程序。
是否有此类系统的任何开源示例?
是否存在任何技术限制导致无法开发此类混合应用程序?
【问题讨论】:
-
Java 没有什么不可能的 :)
-
您始终可以使用 JNI 并将 Java 绑定到 C 代码
-
@Martin Perry,谢谢。我没有使用过 JNI,但这看起来确实很有可能。它还可以解决我访问 AMD-ADL 库的其他问题,因为我正在将 SWIG 视为该问题的解决方案,但我没有看到将 SWIG 用于 cuda 项目的任何真正可能性。
标签: java cuda cross-platform opencl