DEVICE_NOT_FOUND 正在呼叫 pyopencl.Context
DEVICE_NOT_FOUND while calling pyopencl.Context
我正在努力处理以下 Python 代码:
import pyopencl as cl
ctx = cl.Context(dev_type=cl.device_type.GPU)
它给出了以下异常:
RuntimeError: clcreatecontextfromtype failed: DEVICE_NOT_FOUND
我的 OS 是 Linux Mint Debian Edition 2,运行 在配备 i7-5600U 的笔记本电脑上。它也有一个图形卡,但我不使用它。我正在使用 Python 3.4.2.
我已经安装了 Debian 软件包 amd-opencl-icd
(我首先尝试 beignet
,但后来命令 clinfo
失败了)。
我使用 pip
安装了 pyopencl
,使用这个 tutorial 安装了 opencl
。请注意,我没有执行第四步(创建符号 link 到 intel64.icd
),因为我没有这个文件。教程最后测试成功。
你对正在发生的事情有任何暗示吗?很奇怪opencl的C++测试(在教程中)和pyopencl的安装都成功了,但是pyopencl这个简单的命令却失败了
编辑
安装 Intel driver 后,我现在遇到了不同的问题。
命令 clinfo
给出以下内容:
terminate called after throwing an instance of 'unsigned long'
上面的Python代码给出:
LogicError: clcreatecontextfromtype failed: INVALID_PLATFORM
您已经安装了英特尔 opencl SDK,它为您提供了编译器,也许还有 CPU 运行时。您正在尝试创建一个由 GPU 设备组成的上下文,这意味着您需要英特尔高清显卡的运行时。从下面的 link 中获取 64 位驱动程序。
https://software.intel.com/en-us/articles/opencl-drivers#latest_linux_driver
CPU 运行时也可从 link 获得。对于 opencl HD 图形驱动程序,您需要按照与之前相同的步骤进行操作(将 .rpm 转换为 .deb)。 CPU 驱动程序有一个可以执行的脚本。
安装运行时后出现的 INVALID_PLATFORM 错误似乎是因为它希望在从设备类型创建时将平台作为 属性 传递。它期望属性作为键元组对的列表。这显示在下面第一个可用平台的代码片段中。关键字是context_properties中的值之一,值是平台对象本身。
import pyopencl as cl
platforms = cl.get_platforms()
ctx = cl.Context(dev_type=cl.device_type.GPU, properties=[(cl.context_properties.PLATFORM, platforms[0])])
print(ctx.devices)
在我的平台上打印
[<pyopencl.Device 'Intel(R) HD Graphics 4600' on 'Intel(R) OpenCL' at 0x1c04b217140>]
因为我的第一个平台是英特尔。
我正在努力处理以下 Python 代码:
import pyopencl as cl
ctx = cl.Context(dev_type=cl.device_type.GPU)
它给出了以下异常:
RuntimeError: clcreatecontextfromtype failed: DEVICE_NOT_FOUND
我的 OS 是 Linux Mint Debian Edition 2,运行 在配备 i7-5600U 的笔记本电脑上。它也有一个图形卡,但我不使用它。我正在使用 Python 3.4.2.
我已经安装了 Debian 软件包 amd-opencl-icd
(我首先尝试 beignet
,但后来命令 clinfo
失败了)。
我使用 pip
安装了 pyopencl
,使用这个 tutorial 安装了 opencl
。请注意,我没有执行第四步(创建符号 link 到 intel64.icd
),因为我没有这个文件。教程最后测试成功。
你对正在发生的事情有任何暗示吗?很奇怪opencl的C++测试(在教程中)和pyopencl的安装都成功了,但是pyopencl这个简单的命令却失败了
编辑 安装 Intel driver 后,我现在遇到了不同的问题。
命令 clinfo
给出以下内容:
terminate called after throwing an instance of 'unsigned long'
上面的Python代码给出:
LogicError: clcreatecontextfromtype failed: INVALID_PLATFORM
您已经安装了英特尔 opencl SDK,它为您提供了编译器,也许还有 CPU 运行时。您正在尝试创建一个由 GPU 设备组成的上下文,这意味着您需要英特尔高清显卡的运行时。从下面的 link 中获取 64 位驱动程序。
https://software.intel.com/en-us/articles/opencl-drivers#latest_linux_driver
CPU 运行时也可从 link 获得。对于 opencl HD 图形驱动程序,您需要按照与之前相同的步骤进行操作(将 .rpm 转换为 .deb)。 CPU 驱动程序有一个可以执行的脚本。
安装运行时后出现的 INVALID_PLATFORM 错误似乎是因为它希望在从设备类型创建时将平台作为 属性 传递。它期望属性作为键元组对的列表。这显示在下面第一个可用平台的代码片段中。关键字是context_properties中的值之一,值是平台对象本身。
import pyopencl as cl
platforms = cl.get_platforms()
ctx = cl.Context(dev_type=cl.device_type.GPU, properties=[(cl.context_properties.PLATFORM, platforms[0])])
print(ctx.devices)
在我的平台上打印
[<pyopencl.Device 'Intel(R) HD Graphics 4600' on 'Intel(R) OpenCL' at 0x1c04b217140>]
因为我的第一个平台是英特尔。