【发布时间】:2013-03-08 23:40:41
【问题描述】:
我已经构建了一个简单的基于 OpenCL 的程序(使用 C++)并在 Windows 8 系统上使用 AMD FirePro V4900 卡进行了测试。我使用的是 AMD APP SDK。
当我将我的二进制文件复制到另一台机器(带有 NVIDIA Quadro 4000 卡的 Windows 8)时,我得到 “程序入口点 clReleaseDevice 不能位于动态链接库(我的程序的 exe)中”。第二台机器安装了最新的 NVIDIA 驱动程序和 CUDA 5。
我需要什么才能使它与 NVIDIA 硬件一起使用有什么想法吗?
【问题讨论】:
-
我不相信这与 cuda 有任何关系,所以我删除了那个标签。
-
至少,我会 1) 检查 NVidia OpenCL 开发者网站,2) 下载 NVidia SDK,以及 3) 确保从 SDK 将所有必要的 NVidia .dll 安装到您的目标计算机: developer.nvidia.com/opencl。 AMD 最近似乎对他们对 NVidia 硬件的支持变得草率了 :)
-
为什么 AMD 应该支持 NVidia 硬件?为自己的硬件正确实现 OpenCL 规范是 NVidia 的责任,据我所知,NVidia OpenCL 实现是一个瘦包装器,它在后台转换为 CUDA 代码,所以它应该大部分都可以工作。我的猜测是您使用的是 OpenCL 1.1 实现(clReleaseDevice 仅存在于 OpenCL 1.2 下),因此如果 NVidia 不支持 OpenCL 1.2,那么您就死定了。
-
谢谢托马斯,这看起来像我的问题。我使用最新的 AMD SDK,因此 OpenCL 1.2 和我尝试运行的 NVIDIA 卡仅支持 OpenCL 1.1。你知道如何为 OpenCL 1.1 构建吗?
-
我能想到的唯一解决方案是重写代码而不使用 1.2 功能(例如设备裂变、图像数组等),这取决于您的应用程序可能可行也可能不可行。对 NVidia OpenCL 的支持一直很乏味,遗憾的是,在他们解决之前,您无能为力。您可以在 CUDA 中重写该东西,但随后您将失去在 AMD 硬件下运行它的能力。基本上,竞争性的利基标准很糟糕。