调用pyopencl.Context时DEVICE_NOT_FOUND

时间:2016-02-11 08:01:07

标签: python opencl gpu intel pyopencl

我正在努力使用以下Python代码:

import pyopencl as cl
ctx = cl.Context(dev_type=cl.device_type.GPU)

它提供以下例外:

RuntimeError: clcreatecontextfromtype failed: DEVICE_NOT_FOUND

我的操作系统是Linux Mint Debian Edition 2,在i7-5600U的笔记本电脑上运行。它还有一个图形卡,但我不使用它。我使用的是Python 3.4.2。

我已经安装了Debian软件包amd-opencl-icd(我首先尝试了beignet,但是命令clinfo失败了。)

我使用此tutorial使用pyopenclpip安装了opencl。请注意,我没有执行第四步(创建到intel64.icd的符号链接),因为我没有此文件。本教程结束时的测试成功。

你对发生的事情有任何暗示吗?我很惊讶opencl的C ++测试(在教程中)和pyopencl的安装都成功了,但这个简单的pyopencl命令失败了。

EDIT 安装Intel driver后,我现在遇到了另一个问题。

命令clinfo提供以下内容:

terminate called after throwing an instance of 'unsigned long'

上面的Python代码给出了:

LogicError: clcreatecontextfromtype failed: INVALID_PLATFORM

1 个答案:

答案 0 :(得分:1)

您已经安装了intel opencl SDK,它为您提供了编译器和CPU运行时。您正在尝试创建由GPU设备组成的上下文,这意味着您需要intel HD图形的运行时。从下面的链接中获取64位驱动程序。

https://software.intel.com/en-us/articles/opencl-drivers#latest_linux_driver

也可以从该链接获得CPU运行时。您需要按照与以前相同的步骤为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>]

因为我的第一个平台是英特尔。