Python LogicError:clGetPlatformIDs失败:未找到平台khr

Iri*_*eva 5 ubuntu pyopencl

在Ubuntu中为Python程序集进行鼻子测试时会发生错误:

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
Run Code Online (Sandbox Code Playgroud)

如何修复它?

小智 5

看来您已经安装了 pyopencl 但没有实际的设备驱动程序。请参阅https://documen.tician.de/pyopencl/misc.html上的文档。

\n\n

以下是对这种行为的描述:

\n\n
\n

请注意,如果没有 OpenCL 设备驱动程序(所谓的 \xe2\x80\x9cICD\xe2\x80\x9d,用于 \xe2\x80\x9c 可安装客户端驱动程序\xe2\x80\x9d),PyOpenCL 就毫无乐趣(即无法运行代码) ),通过 OpenCL 提供对硬件的访问。如果您收到类似 pyopencl.cffi_cl.LogicError: clGetPlatformIDs failed: 的错误消息,则意味着您没有安装 OpenCL 驱动程序。

\n
\n\n

基本上,下一个命令应该足以让它在 CPU 上运行:

\n\n
[pip]conda install pocl\n
Run Code Online (Sandbox Code Playgroud)\n\n

为了正确安装 AMD 和 Nvidia 设备,请查找供应商提供的 OpenCL 驱动程序。

\n


小智 5

尝试

$ sudo apt install pocl-opencl-icd
Run Code Online (Sandbox Code Playgroud)

我在适用于 Windows 10、Python 3.8.10 的 Ubuntu WSL 上进行了测试。


Yas*_*ash -1

尝试这个。它应该有效:

devices = [ d for d in cl.get_platforms()[0].get_devices(cl.device_type.GPU)]
Run Code Online (Sandbox Code Playgroud)

如果您想列出您平台上的所有兼容设备,只需使用

platform = cl.get_platform()
my_devices = platform[0].get_devices(device_type = cl.devices_type.ALL)
print my_devices
Run Code Online (Sandbox Code Playgroud)

要在任何兼容设备上创建上下文,请使用以下命令:

context = cl.Context([my_devices[<index>])
Run Code Online (Sandbox Code Playgroud)

其中对应于您要为其创建上下文的设备。例如:

context = cl.Context([my_devices[0])
Run Code Online (Sandbox Code Playgroud)

也可以参考我的这篇文章,会有帮助。我也遇到了这个问题:

pyopencl:为特定设备创建上下文

  • 这是对 cl.get_platforms() 的调用失败,因此该答案中的所有代码都不起作用。 (6认同)