使用Intel OpenCL.dll和NVIDIA CUDA安装

时间:2013-10-15 12:29:31

标签: c++ windows dll cuda opencl

我的计算机配有Intel CPU和NVIDIA GPU,运行Windows 7.我有一个用NVIDIA CUDA编写的软件模块,另一个用OpenCL编写的模块。我想在CPU上运行OpenCL模块,使用英特尔OpenCL实现,同时使用CUDA模块。

在我的系统中,我首先安装了CUDA SDK,然后安装了英特尔的SDK。

我在Visual Studio 2012中编译了程序,指示链接器使用Intel的库(我根据intel提供的OpenCL头编译)。

然而,当我运行一个简单的程序来查询硬件时,我只能看到NVIDIA卡。

我尝试过修改Windows注册表和PATH变量。当我用“Dependecy Walker”查询依赖项时,我看到程序依赖于位于c:\ windows \ system32中的dll,它不是Intel dll所在的文件夹。我试过删除这个DLL,但我仍然看到这种依赖,我只能访问GPU。

关于可能发生的事情的任何想法?

2 个答案:

答案 0 :(得分:2)

在Windows上,“OpenCL.dll” 由Khronos提供并由AMD,NVIDIA和Intel重新分发的ICD。

注册表引用了实际的驱动程序,ICD将它们全部枚举。

当您查询OpenCL平台时,您会看到每个安装的驱动程序(AMD,NVIDIA,Intel)都有一个。

在每个平台中都会有设备(或设备),例如,在NVIDIA平台上你会找到你的NVIDIA GPU,在英特尔平台下你会找到你的CPU。

不要替换OpenCL.dll

运行clinfo或GPU-Z以查看它看到的OpenCL平台和设备。

重新安装英特尔CPU驱动程序(2天前刚刚发布的新驱动程序)以确保安装了驱动程序。

注意:您的CPU需要SSE 4.2才能使Intel CPU驱动程序正常工作。

答案 1 :(得分:1)

您可以尝试Installable Client Driver (ICD) Loader。但是,如果它适用于Windows,我没有经验。

由于您不想将GPU与OpenCL一起使用,因此您只需将英特尔OpenCL.dll复制到工作目录中即可。加载.dll时,首先访问工作目录。因此,即使Nvidia OpenCL.dll已安装到您的windows/system32目录中,也会首先找到英特尔库,因此会加载。可能有更好的解决方案可能按需加载dll,如Dynamically load a function from a DLL所述,但作为一种快速解决方案,它应该可行。