在NVIDIA硬件上运行OpenCL程序

3
我已经编写了一个简单的基于OpenCL的程序(用C++编写),并在安装有AMD FirePro V4900显卡的Windows 8系统上进行了测试。我使用了AMD APP SDK。
当我将我的二进制文件复制到另一台机器上(安装有NVIDIA Quadro 4000显卡的Windows 8系统),我收到了“在动态链接库(我的程序的exe)中找不到clReleaseDevice过程入口点”的错误信息。这第二台机器安装了最新的NVIDIA驱动和CUDA 5。
我需要做什么才能使它与NVIDIA硬件兼容?

我不认为这与cuda有任何关系,所以我将删除该标签。 - Robert Crovella
至少,我会 1) 检查 NVidia OpenCL 开发者网站,2) 下载 NVidia SDK,并且 3) 确保从 SDK 安装了所有必要的 NVidia .dll 到目标机器上:https://developer.nvidia.com/opencl。最近 AMD 对于他们对 NVidia 硬件的支持似乎变得有些松懈 :) - paulsm4
为什么AMD应该支持NVidia硬件?实现OpenCL规范对于其自身硬件来说是NVidia的责任,据我所知,NVidia的OpenCL实现是一个薄包装器,在底层转换为CUDA代码,因此它应该大部分工作正常。我猜测您正在使用OpenCL 1.1实现(clReleaseDevice仅存在于OpenCL 1.2下),因此如果NVidia不支持OpenCL 1.2,则无法继续进行。 - Thomas
谢谢Thomas,这似乎是我这种情况的问题所在。我使用最新的AMD SDK,因此是OpenCL 1.2,而我想要运行的NVIDIA显卡仅支持OpenCL 1.1。您知道如何构建OpenCL 1.1吗? - Alexey
我能想到的唯一解决方案是重写代码,不使用1.2功能(如设备分裂、图像数组等),这取决于您的应用程序是否可行。NVidia OpenCL支持一直都很懒散,除非他们开始处理,否则你无能为力,可悲的是。你可以用CUDA重写它,但那样你就失去了在AMD硬件下运行的能力。基本上,竞争的利基标准是糟糕的。 - Thomas
1个回答

2

这是一个关于OpenCL 1.1和1.2版本的问题。Nvidia仍然使用的是OpenCL 1.1版本,而您使用的是AMD的OpenCL 1.2版本。如果要让OpenCL应用程序在两个系统上正常工作,需要删除clReleaseDevice API调用和其他1.2调用,并使用AMD SDK重新编译,选择1.1版本选项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接