Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python pyopencl DLL load failed even with latest drivers

I've installed the latest CUDA and driver for my GPU. I'm using Python 2.7.10 on Win7 64bit. I tried installing pyopencl from:

a. the unofficial windows binaries at http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyopencl

b. by compiling my own after getting the sources from https://pypi.python.org/pypi/pyopencl

The installation was successful on both cases but I get the same error message once I try to import it:

>>> 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.
>>>

I have Visual C++ Redistributable for Visual Studio 2015 installed from https://www.microsoft.com/en-us/download/details.aspx?id=48145 .

I also tried with 2 different versions of the GPU driver (including latest). Same thing. A lot of people seem to get the same error and on some forums I read that by updating the GPU drivers to latest, it works fine. But not for me.

Anyone knows how to fix this?

like image 747
John Kornick Avatar asked Nov 03 '15 05:11

John Kornick


2 Answers

I'm affraid there isn't one right answer to this problem. Each case is different. It depends on what is installed in the OS. To track down such problems I normally use Dependency Walker.

In this specific case I would open _cl.pyd (usually in C:\Python27\Lib\site-packages\pyopencl) in Dependency Walker to check if there aren't any missing dependencies or if for example OpenCL.dll is actually the one which should be used. OpenCL.dll may be installed by other programs and their path added to PATH. Also OpenCL.dll in System32 may be too old. Basically trial and error renaming all but one OpenCL.dll into OpenCL.dll.bak and/or removing paths from PATH may get you there.

like image 62
doqtor Avatar answered Oct 07 '22 12:10

doqtor


I had this same problem and discovered it was caused by AMD OpenCL.dll not having a function introduced in OpenCL 2.1. The Gohlke site only has OpenCL 2.1 and 1.2, while AMD drivers support 2.0.

Because I wanted 2.0, the easy fix was to manually replace the AMD System32/OpenCL.dll with the one from Intel SDK with experimental 2.1 support.

like image 42
Venti Avatar answered Oct 07 '22 13:10

Venti