【问题标题】:Python LogicError: clGetPlatformIDs failed: platform not found khrPython LogicError: clGetPlatformIDs failed: platform not found khr
【发布时间】:2012-08-16 15:03:35
【问题描述】:

在 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

如何解决?

【问题讨论】:

    标签: ubuntu pyopencl


    【解决方案1】:

    您似乎安装了 pyopencl,但没有安装任何实际的设备驱动程序。请参阅https://documen.tician.de/pyopencl/misc.html 的文档。

    这是对这种行为的描述:

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

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

    [pip]conda install pocl
    

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

    【讨论】:

      【解决方案2】:

      这是一个错误。试试这个:

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

      或以 root 身份运行它(不带 sudo)。

      之后你应该可以运行它了。

      添加

      nvidia-smi
      

      到 /etc/rc.local(当然是在退出之前),因此您的 GPU 在每次启动后都可用。

      【讨论】:

        【解决方案3】:

        尝试以 root 身份运行您的 python 脚本。如果cl.get_platforms() 在 root 下没有抛出任何错误,那么您的用户没有足够的权限来执行该操作。要解决这个问题,请安装nvidia-modprobe 包:

        sudo apt-get install nvidia-modprobe
        

        Source

        【讨论】:

          【解决方案4】:

          这可能是因为未正确安装 OpenCL 驱动程序。

          英特尔 CPU 需要用于英特尔酷睿和英特尔至强处理器(16.1.1 或更高版本)的 OpenCL 运行时。从英特尔网站下载并安装最新的 OpenCL™ Runtime。忽略兼容性警告。

          来源:https://youtu.be/AieYqNQ6ADM

          【讨论】:

            【解决方案5】:

            试试这个。它应该工作:

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

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

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

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

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

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

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

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

            pyopencl: creating context for specific device

            【讨论】:

            • 是对 cl.get_platforms() 的调用失败了,所以这个答案中的所有代码都不起作用。
            猜你喜欢
            • 2019-02-07
            • 2012-08-16
            • 1970-01-01
            • 1970-01-01
            • 2020-10-16
            • 1970-01-01
            • 2021-04-17
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多