Mic*_*ina 6 linux nvidia opencl
在最终设法让我的代码用OpenCL编译之后,我似乎无法让输出二进制文件运行!这是在我的Linux笔记本电脑上运行Kubuntu 13.10 x64
我得到的错误是(从cl :: Error打印):
ERROR: clGetPlatformIDs
-1001
Run Code Online (Sandbox Code Playgroud)
我找到了这篇文章,但似乎没有一个明确的解决方案.
我把自己加入了视频组,但这似乎不起作用.
关于ICD配置文件......我不确定我需要做什么 - 这不应该包含在cuda工具包中吗?如果没有,我在哪里下载一个?
编辑:我的系统中似乎有一个ICD文件在/usr/share/nvidia-331/nvidia.icd下.它包含以下文本:
libnvidia-opencl.so.1
Run Code Online (Sandbox Code Playgroud)
我系统中唯一类似于此的文件是:
/usr/lib/nvidia-331/libnvidia-opencl.so.331.20
Run Code Online (Sandbox Code Playgroud)
我的ICD资料有点不对吗?有谁知道修复它的方法?
(Mods:我不确定这篇文章是否应该移至 AskUbuntu,因为它是与 Linux bumblebee 而不是 OpenCL 本身相关的问题?)
好的,经过大量努力我设法解决了这个问题。
我需要做两件事:
创建从 /usr/share/nvidia-331/nvidia.icd 到 /etc/OpenCL/vendors 的符号链接
sudo ln -s /usr/share/nvidia-331/nvidia.icd /etc/OpenCL/vendors
Run Code Online (Sandbox Code Playgroud)
注意:在大多数情况下,您需要将 nvidia-331 替换为您正在使用的任何驱动程序 - 最常见的是 nvidia-current
我真的很好奇为什么在安装 cuda 工具包时不会自动完成此操作 - 但我注意到如果没有此步骤,OpenCL 程序将无法运行!
工作起来如此复杂的原因是我有一台 nvidia optimus 笔记本电脑,在 Linux 上的驱动程序支持很差。为了解决这个问题,我安装了bumblebee,以允许在我的 nvidia 卡和 intel 卡之间切换。
但是,因为我使用的是 bumblebee - 除非明确告知,否则 nvidia 显卡(和 nvidia 驱动程序)将被卸载。为了使用OpenCL,我们需要打开nvidia显卡。
为此,我们需要使用optirun以下命令明确告诉 bumblebee 打开 nvidia 卡primusrun:
optirun myopenclprogram
Run Code Online (Sandbox Code Playgroud)
但请注意,因为重要的是 nvidia 卡已打开并加载了驱动程序,所以您不需要继续使用optirun myprogram它来使其工作(因为这总是涉及等待显卡初始化的初始延迟) )。
例如,您可以运行optirun kate,这将打开 nvidia 显卡。然后,您可以在单独的终端中运行 opencl 程序而不需要 optirun,它会正常工作,因为显卡已经打开(并且只要您让 kate 运行,就会保持打开状态)。
您会发现,这次启动您的程序没有任何延迟!这可以节省您大量的等待时间 - 特别是如果您正在开发相关的 opencl 程序。
再次强调,只要你保持 nvidia 显卡开启,你的 opencl 程序就可以工作。
我可能会联系大黄蜂开发人员,看看是否有更简单的方法来让它工作并报告他们在这里所说的内容。希望有某种方法可以打开和关闭 nvidia 卡,而不需要保持程序(如我的示例中的 kate)运行。
我希望这对将来尝试在带有 bumblebee 的 Linux 笔记本电脑上使用 OpenCL 的人有所帮助(我自己找不到任何明确的解决方案)
EDIT2:对于大黄蜂用户来说,打开和关闭显卡可以按如下方式完成:
打开显卡并加载 nvidia 模块
sudo tee /proc/acpi/bbswitch <<< ON
sudo modprobe nvidia
Run Code Online (Sandbox Code Playgroud)
关闭显卡(nvidia模块自动卸载)
sudo tee /proc/acpi/bbswitch <<< OFF
Run Code Online (Sandbox Code Playgroud)