运行 OpenCL 代码时出现错误:clGetPlatformIDs -1001 (Linux)

问题描述 投票:0回答:3

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

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

ERROR: clGetPlatformIDs
-1001

我找到了这篇文章,但似乎没有明确的解决方案。

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

关于 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
3个回答
2
投票

(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显卡。

为此,我们需要使用命令

optirun
primusrun
:

明确告诉 bumblebee 打开 nvidia 卡
optirun myopenclprogram

但是请注意,因为最重要的是 nvidia 卡已打开并且驱动程序已加载,因此您不需要继续使用

optirun myprogram
来使其工作(因为这总是涉及等待的初始延迟)要初始化的显卡)。

例如,您可以运行

optirun kate

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

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

再次强调,只要你保持nvidia显卡开启,你的opencl程序就可以工作。

我可能会联系大黄蜂开发人员,看看是否有更简单的方法来让它工作,并报告他们在这里所说的内容。希望有某种方法可以打开和关闭 nvidia 卡,而不需要保持程序(如我的示例中的 kate)运行。

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

EDIT2:对于 bumlebee 用户,可以按以下方式打开和关闭显卡:

打开显卡并加载nvidia模块

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

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

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

2
投票
分享一些添加信息。我已经在 Ubuntu 13.10 saucy 上安装了 intel opencl 版本。问题是一样的:-1001 错误。我通过与上一篇文章类似的链接解决了这个问题:

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

0
投票
就我而言,切换到 Nvidia 驱动程序就成功了。由于某种原因,在 X.org X 服务器驱动程序上运行时不允许检测到 GPU。这是安装必要的 Nvidia OpenCL 工具后的结果。

© www.soinside.com 2019 - 2024. All rights reserved.