This is mostly a note in case someone has the same issue.
I am setting up a debian8 virtual machine, with nvidia drivers from
After installing fresh pyopencl using pip, I got an error:
---> 39 from pyopencl._cffi import ffi as _ffi
40 from .compyte.array import f_contiguous_strides, c_contiguous_strides
undefined symbol: clSVMFree
After some digging, this is due to the fact that pyopencl was compiled
with OpenCL 2.0 support, which the installed libraries do not support.
And that in turn is due to debian8’s OpenCL headers, which as of
version 2.0~svn31815-2~bpo8+1 includes:
#define CL_VERSION_1_0 1
#define CL_VERSION_1_1 1
#define CL_VERSION_1_2 1
#define CL_VERSION_2_0 1
..and that ‘CL_VERSION_2_0’ triggers the OpenCL 2.0 support in pyopencl…
The solution is either to not install the opencl-headers from backports
(only the nvidia drivers), or to use the 'CL_PRETEND_VERSION’ option (but that
requires manual compilation, less convenient than pip for deployment)..
So, problem solved, but I find this less than satisfying.
- Should pyopencl compile with OpenCL 2.0 support even if no OpenCL 2
devices/libraries are present (which is the case according to clinfo) ?
- Does that also mean that on a system with a mixture of 1.2 and 2.0 devices
different pyopencl versions would be needed ?
- Or is it a bug in debian8 backports with the wrong header ?
- Or maybe I should blame nvidia for sticking to 1.2 only...
PyOpenCL mailing list