8

While making nosetests for the set of Python programs in Ubuntu an error occurs:

devices = [ d for d in cl.get_platforms()[0].get_devices() if
LogicError: clGetPlatformIDs failed: platform not found khr


File "/home/fateeva/prog/deflectometry/SGMFMeasurement/_PhaseShifts.py", line 30, in <module>
    devices = [ d for d in cl.get_platforms()[0].get_devices() if
LogicError: clGetPlatformIDs failed: platform not found khr

How it's possible to fix it?

gre_gor
  • 6,669
  • 9
  • 47
  • 52
Irina Fateeva
  • 81
  • 1
  • 1
  • 3

6 Answers6

4

It seems you have pyopencl installed but none of the actual device drivers. Please consult the documentation at https://documen.tician.de/pyopencl/misc.html.

Here is the description of such a behaviour:

Note that PyOpenCL is no fun (i.e. cannot run code) without an OpenCL device driver (a so-called “ICD”, for “installable client driver”) that provides access to hardware through OpenCL. If you get an error message like pyopencl.cffi_cl.LogicError: clGetPlatformIDs failed: , that means you have no OpenCL drivers installed.

Basically, the next command should be enough to get it running on a CPU:

[pip]conda install pocl

For proper installation of AMD and Nvidia devices look for vendor supplied OpenCL drivers.

2

Try

$ sudo apt install pocl-opencl-icd

I tested it on Ubuntu WSL for Windows 10, Python 3.8.10.

Chien Nguyen
  • 109
  • 1
  • 6
1

this is a bug. Try this:

sudo apt-get install nvidia-settings
sudo nvidia-smi

or run it (without sudo) as root.

After that your should be able to run it.

Add

nvidia-smi

to /etc/rc.local (before exit, of course), so you GPU will be available after each boot.

Philippe Delteil
  • 937
  • 13
  • 30
John Rambo
  • 146
  • 11
1

This could be because OpenCL drivers arent properly installed.

Intel CPUs require OpenCL Runtime for Intel Core and Intel Xeon Processors (16.1.1 or later). Download and install OpenCL™ Runtime latest from intel website. Ignore the compatibility warning.

Source: https://youtu.be/AieYqNQ6ADM

Anonymous Platypus
  • 1,242
  • 4
  • 18
  • 47
0

Try running your python script as root. If cl.get_platforms() does not throw any errors under root, then your user does not have sufficient privilege to perform the action. To solve this, install nvidia-modprobe package:

sudo apt-get install nvidia-modprobe

Source

pram
  • 1,484
  • 14
  • 17
-1

Try this. It should work:

devices = [ d for d in cl.get_platforms()[0].get_devices(cl.device_type.GPU)]

If you want to list all the compatible devices on your platform just use

platform = cl.get_platform()
my_devices = platform[0].get_devices(device_type = cl.devices_type.ALL)
print my_devices

To create a context on any compatible device use this:

context = cl.Context([my_devices[<index>])

Where corresponds to the device for which you want to create a context. for example:

context = cl.Context([my_devices[0])

also refer to this post of mine, it will help. I too had problems with this:

pyopencl: creating context for specific device

Community
  • 1
  • 1
Yash
  • 689
  • 4
  • 11
  • 26