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

gpnt7bae  于 2023-08-03  发布在  Linux
关注(0)|答案(3)|浏览(226)

在最终设法让我的代码用OpenCL编译后,我似乎无法让输出的二进制文件运行!这是在我的Linux笔记本电脑运行Kubuntu 13.10 x64
我得到的错误是(从cl::Error打印):

ERROR: clGetPlatformIDs
-1001

字符串
我找到了this post,但似乎没有明确的解决方案。
我把自己加入了视频组,但这似乎不起作用。
关于ICD的资料...我不知道我需要做什么-这不应该包括在cuda工具包?如果没有,哪里可以下载?

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

libnvidia-opencl.so.1


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

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


我的ICD配置文件是否有问题?有谁知道怎么修吗?

vuktfyat

vuktfyat1#

  • (Mods:我不确定这篇文章是否应该转移到AskUbuntu,因为它是一个与Linux大黄蜂有关的问题,而不是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大黄蜂

之所以这是如此复杂的工作是因为我有一个nvidia optimus笔记本电脑与穷人的驱动程序支持linux。为了解决这个问题,我安装了bumblebee,允许在我的nvidia卡和英特尔卡之间切换。
但是,因为我使用的是大黄蜂-nvidia显卡(和nvidia驱动程序)将被卸载,除非明确告知。为了使用OpenCL,我们需要打开nvidia显卡。
要做到这一点,我们需要使用命令optirunprimusrun显式地告诉bumblebee打开nvidia卡:

optirun myopenclprogram


但是请注意,因为 * 所有重要的是nvidia卡已打开并加载了驱动程序 *,所以您不需要继续使用optirun myprogram来使其工作(因为这总是涉及等待图形卡初始化的初始延迟)。
例如,你可以运行optirun kate,这将打开nvidia显卡。然后,您可以在一个 * 单独的终端 * 只运行您的opencl程序,而不运行optirun,它将工作得很好,因为图形卡已经打开(并将保持在只要你离开,例如。凯特跑步)。

**您会注意到,这次启动程序没有延迟!**这节省了大量的等待-特别是如果你正在开发的opencl程序的问题。

再一次,只要你保持nvidia图形卡打开,你的opencl程序就能工作。
我可能会联系大黄蜂开发人员,看看是否有一个更简单的方法让这个工作,并报告他们在这里说什么。希望有一些方法可以打开和关闭nvidia卡,而不需要保持程序(如我的例子中的kate)运行。
我希望这可以帮助任何人在未来尝试在带有大黄蜂的Linux笔记本电脑上使用OpenCL(我自己找不到任何明确的解决方案)

EDIT 2:对于大黄蜂用户,打开和关闭显卡的步骤如下:
打开显卡,加载nvidia模块

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

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

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

d6kp6zgx

d6kp6zgx2#

分享一些附加信息。我在Ubuntu 13.10上安装了intel opencl版本。问题是一样的:-1001错误。我通过链接类比地解决了它到以前的帖子:

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

字符串

zf2sa74q

zf2sa74q3#

在我的情况下,切换到Nvidia驱动程序就成功了。由于某种原因,在www.example.com上运行X.orgX服务器驱动程序不允许检测到GPU。这是在安装必要的Nvidia OpenCL工具之后。

相关问题