在最终设法让我的代码用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配置文件是否有问题?有谁知道怎么修吗?
3条答案
按热度按时间vuktfyat1#
好吧,我设法解决了这个问题后,负荷的努力。
我需要做两件事:
使用ICD
创建一个从/usr/share/nvidia-331/nvidia.icd到/etc/OpenCL/vendors的符号链接
字符串
我真的很好奇为什么在安装cuda工具包时没有自动完成这一步-但我注意到OpenCL程序没有这一步就无法工作!
Nvidia Optimus大黄蜂
之所以这是如此复杂的工作是因为我有一个nvidia optimus笔记本电脑与穷人的驱动程序支持linux。为了解决这个问题,我安装了bumblebee,允许在我的nvidia卡和英特尔卡之间切换。
但是,因为我使用的是大黄蜂-nvidia显卡(和nvidia驱动程序)将被卸载,除非明确告知。为了使用OpenCL,我们需要打开nvidia显卡。
要做到这一点,我们需要使用命令
optirun
或primusrun
显式地告诉bumblebee打开nvidia卡:型
但是请注意,因为 * 所有重要的是nvidia卡已打开并加载了驱动程序 *,所以您不需要继续使用
optirun myprogram
来使其工作(因为这总是涉及等待图形卡初始化的初始延迟)。例如,你可以运行
optirun kate
,这将打开nvidia显卡。然后,您可以在一个 * 单独的终端 * 只运行您的opencl程序,而不运行optirun,它将工作得很好,因为图形卡已经打开(并将保持在只要你离开,例如。凯特跑步)。**您会注意到,这次启动程序没有延迟!**这节省了大量的等待-特别是如果你正在开发的opencl程序的问题。
再一次,只要你保持nvidia图形卡打开,你的opencl程序就能工作。
我可能会联系大黄蜂开发人员,看看是否有一个更简单的方法让这个工作,并报告他们在这里说什么。希望有一些方法可以打开和关闭nvidia卡,而不需要保持程序(如我的例子中的kate)运行。
我希望这可以帮助任何人在未来尝试在带有大黄蜂的Linux笔记本电脑上使用OpenCL(我自己找不到任何明确的解决方案)
EDIT 2:对于大黄蜂用户,打开和关闭显卡的步骤如下:
打开显卡,加载nvidia模块
型
关闭显卡(nvidia模块自动卸载)
型
d6kp6zgx2#
分享一些附加信息。我在Ubuntu 13.10上安装了intel opencl版本。问题是一样的:-1001错误。我通过链接类比地解决了它到以前的帖子:
字符串
zf2sa74q3#
在我的情况下,切换到Nvidia驱动程序就成功了。由于某种原因,在www.example.com上运行X.orgX服务器驱动程序不允许检测到GPU。这是在安装必要的Nvidia OpenCL工具之后。