即使使用最新的驱动程序,Python pyopencl DLL加载也失败

时间:2015-11-03 05:23:50

标签: python opencl nvidia pyopencl

我为我的GPU安装了最新的CUDA和驱动程序。我在Win7 64bit上使用Python 2.7.10。 我尝试从:

安装pyopencl

一个即可。 http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyopencl

的非官方Windows二进制文件

B'/ strong>即可。从https://pypi.python.org/pypi/pyopencl

获取来源后编译我自己的

两种情况下安装都成功,但一旦我尝试导入它,我收到相同的错误消息:

>>> import pyopencl
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\site-packages\pyopencl-2015.1-py2.7-win-amd64.egg\pyope
cl\__init__.py", line 30, in <module>
    import pyopencl._cl as _cl
ImportError: DLL load failed: The specified procedure could not be found.
>>>

我从https://www.microsoft.com/en-us/download/details.aspx?id=48145安装了Visual Studio 2015的Visual C ++ Redistributable。

我还尝试了2种不同版本的GPU驱动程序(包括最新版本)。一样。 很多人似乎都得到了相同的错误,在一些论坛上,我通过将GPU驱动程序更新到最新版本来阅读,它运行正常。但不适合我。

任何人都知道如何解决这个问题?

5 个答案:

答案 0 :(得分:2)

我遇到了同样的问题并发现它是由于OpenCL.dll没有在OpenCL 2.1中引入的功能引起的。 Gohlke网站只有OpenCL 2.1和1.2,而AMD驱动程序支持2.0。

因为我想要2.0,所以简单的解决方法就是手动将AMD System32 / OpenCL.dll替换为英特尔SDK中的实验2.1支持。

答案 1 :(得分:1)

我很担心这个问题没有一个正确的答案。每个案例都不同。这取决于操作系统中安装的内容。 为了追踪这些问题,我通常使用Dependency Walker

在这种特定情况下,我会在Dependency Walker中打开_cl.pyd(通常在C:\Python27\Lib\site-packages\pyopencl中)以检查是否没有任何遗漏的依赖关系,或者例如OpenCL.dll是否为OpenCL.dll实际上是应该使用的那个。其他程序可能会安装PATH,并将其路径添加到OpenCL.dllSystem32中的OpenCL.dll也可能过于陈旧。基本上,只有一个OpenCL.dll.bak重命名为PATH并且/或从null删除路径的试验和错误可能会让您到达那里。

答案 2 :(得分:1)

我遇到了同样的问题here,我解决的方式是:

  • 确保已下载并安装了正确的OpenCL SDK。例如

  • 打开Windows命令提示符cmd并设置LIBINCLUDE环境变量。例如

    • 英特尔:

      • set INCLUDE=C:\Program Files (x86)\IntelSWTools\system_studio_2020\OpenCL\sdk\include
      • set LIB=C:\Program Files (x86)\IntelSWTools\system_studio_2020\OpenCL\sdk\lib\x64
    • NVIDIA:

      • set LIB=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v3.2\lib\x64
      • set INCLUDE=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v3.2\include
  • 现在运行pip install pyopencl --no-cache-dir

  • 打开Python并测试import pyopencl

可能存在一种通过pipwin或使用--global-option设置include和library文件夹来安装PyOpenCL的方法。但是到目前为止,我还没有成功。

PS 。上述NVIDIA OpenCL SDK(即CUDA工具包)turns out非常过时。请不要使用它。如果已安装,请卸载并安装较新的版本。

答案 3 :(得分:0)

尝试我之后尝试使用的版本1.2和2.1并得到此问题。切换whl并且它工作但使用了Intel GPU。 NVidia OpenCL.dll是2.0,但仍无法正常工作。

刚检查了cl.get_platforms数组并找到了它们 英特尔 1. NVidia

  1. pyopencl.Platform英特尔(R)OpenCL&amp; pyopencl.Device Intel(R)Core(TM)... Intel(R)OpenCL
  2. pyopencl.Platform NVIDIA CUDA&amp; pyopencl.Device Quadro ... NVIDIA CUDA

答案 4 :(得分:0)

我在Lenovo Yoga 720中遇到了同样的问题。它具有NVidia Geforce GTX1050和Intel i7 630 CPU / GPU。

我很早以前就为Nvidia CUDA安装了更新驱动程序和SDK。但是现在我要运行python OpenGL,并且还要安装intel SDK。 Pip安装pyopencl没问题,但是导入pyopengl给我dll加载失败。

解决方案是将Windows \ system32 \ opencl.dll更改为新的。旧的是NVidia签名的(您可以在文件opencl.dll的属性中看到它)。新版本是Microsoft签名的2.1.1.0版Khronos OpenCL ICD

我希望这对您有用。经过很长时间的尝试,解决方案到来了...但是除了新的opencl.dll文件