【问题标题】:ERROR: clGetPlatformIDs -1001 when running OpenCL code (Linux)错误:运行 OpenCL 代码时的 clGetPlatformIDs -1001 (Linux)
【发布时间】:2013-12-18 14:11:01
【问题描述】:

在终于设法让我的代码用 OpenCL 编译后,我似乎无法让输出二进制文件运行!这是在我运行 Kubuntu 13.10 x64 的 linux 笔记本电脑上

我得到的错误是(从 cl::Error 打印):

ERROR: clGetPlatformIDs
-1001

我找到了this post,但似乎没有明确的解决方案。

我将自己添加到视频组,但这似乎不起作用。

关于 ICD 配置文件...我不确定我需要做什么 - 这不应该包含在 cuda 工具包中吗?如果没有,我在哪里可以下载?

编辑:我的系统中的 /usr/share/nvidia-331/nvidia.icd 下似乎有一个 ICD 文件。它包含以下文本:

libnvidia-opencl.so.1

我系统中唯一与此类似的文件是:

/usr/lib/nvidia-331/libnvidia-opencl.so.331.20

我的 ICD 配置文件有什么问题吗?有谁知道解决方法吗?

【问题讨论】:

标签: linux opencl nvidia


【解决方案1】:

(Mods:我不确定这篇文章是否应该转移到 AskUbuntu,因为这是一个与 Linux bumblebee 相关的问题,而不是 OpenCL 本身?)

好的,经过大量的努力,我设法解决了这个问题。

我需要做两件事:

让 ICD 发挥作用

创建一个从 /usr/share/nvidia-331/nvidia.icd 到 /etc/OpenCL/vendors 的符号链接

sudo ln -s /usr/share/nvidia-331/nvidia.icd /etc/OpenCL/vendors

注意:在大多数情况下,您需要将 nvidia-331 替换为您正在使用的任何驱动程序 - 最常见的是 nvidia-current

我真的很好奇为什么在安装 cuda 工具包时这不会自动完成 - 但我注意到,如果没有这一步,OpenCL 程序将无法运行!

Nvidia Optimus 与 Bumblebee

工作起来如此复杂的原因是我有一台 nvidia optimus 笔记本电脑,在 linux 上的驱动程序支持很差。为了解决这个问题,我安装了 bumblebee 以允许在我的 nvidia 卡和 intel 卡之间切换。

但是,因为我使用的是 bumblebee - 除非明确告知,否则将卸载 nvidia 显卡(和 nvidia 驱动程序)。为了使用 OpenCL,我们需要打开 nvidia 显卡。

为此,我们需要使用命令optirunprimusrun 明确告诉bumblebee 打开nvidia 卡:

optirun myopenclprogram

但是请注意,因为重要的是打开了 nvidia 卡并加载了驱动程序,您无需继续使用 optirun myprogram 即可使其正常工作(因为这总是涉及等待显卡初始化的初始延迟)。

例如,您可以运行 optirun kate,这将打开 nvidia 显卡。然后,您可以在 单独的终端 中运行您的 opencl 程序而不使用 optirun,它会正常工作,因为显卡已经打开(并且只要您离开例如 kate 运行,它将保持打开状态)。

您会注意到这次启动程序没有延迟!这为您节省了很多等待时间 - 特别是如果您正在开发相关的 opencl 程序。

再一次,只要保持 nvidia 显卡开启,你的 opencl 程序就可以运行。

我可能会联系 Bumblebee 开发人员,看看是否有更简单的方法可以让它发挥作用,并在此处报告他们所说的内容。希望有一些方法可以打开和关闭 nvidia 卡,而无需保持程序(如我的示例中的 kate)运行。

我希望这对将来尝试在带有 bumblebee 的 Linux 笔记本电脑上使用 OpenCL 的人有所帮助(我自己找不到任何明确的解决方案)

EDIT2:对于大黄蜂用户来说,开启和关闭显卡的操作如下:

打开显卡并加载nvidia模块

sudo tee /proc/acpi/bbswitch <<< ON
sudo modprobe nvidia

关闭显卡(自动卸载​​nvidia模块)

sudo tee /proc/acpi/bbswitch <<< OFF

【讨论】:

【解决方案2】:

分享一些添加信息。我已经在 Ubuntu 13.10 saucy 上安装了英特尔 opencl 版本。问题一直是一样的:-1001 错误。我通过类似于上一篇文章的链接解决了它:

sudo ln -sf /opt/intel/opencl-1.2-3.2.1.16712/etc/intel64.icd /etc/OpenCL/vendors/nvidia.icd

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多