在最终设法让我的代码与OpenCL编译后,我似乎无法得到输出二进制运行! 这是在我的Linux笔记本电脑上运行Kubuntu 13.10 x64
我得到的错误是(打印从cl ::错误):
ERROR: clGetPlatformIDs -1001
我发现这个post,但似乎没有一个明确的解决scheme。
我join了自己的video组,但这似乎并不奏效。
关于ICDconfiguration文件…我不知道我需要做什么 – 不应该包含在cuda工具包中吗? 如果没有,我可以在哪里下载?
编辑 :看来我有一个ICD文件在我的系统下/usr/share/nvidia-331/nvidia.icd。 它包含以下文本:
libnvidia-opencl.so.1
我的系统中唯一类似于此的文件是:
/usr/lib/nvidia-331/libnvidia-opencl.so.331.20
我的ICD档案有问题吗? 有谁知道一个方法来解决它?
分享一些添加信息。 我在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
(Mods:我不确定这个帖子是否应该转移到AskUbuntu,因为这是一个与Linux bumblebee相关的问题,而不是OpenCL本身?)
好吧,所以我设法解决这个问题后,大量的努力。
有两件事我需要做:
创建从/usr/share/nvidia-331/nvidia.icd到/ etc / OpenCL / vendor的符号链接
sudo ln -s /usr/share/nvidia-331/nvidia.icd /etc/OpenCL/vendors
注意:在大多数情况下,您需要用您正在使用的任何驱动程序来替换nvidia-331 – 通常是nvidia-current
我真的很好奇,为什么在安装cuda工具包的时候不能自动完成 – 但是我注意到,没有这个步骤,OpenCL程序将无法工作!
之所以这么复杂的工作是因为我有一个nvidia optimus笔记本电脑在Linux上的驱动程序支持不佳。 为了解决这个问题,我安装了bumblebee以允许在我的nvidia卡和intel卡之间切换。
但是,因为我使用大黄蜂 – NVIDIA显卡(和NVIDIA驱动程序)将被卸载,除非明确告知。 为了使用OpenCL,我们需要打开nvidia显卡。
要做到这一点,我们需要明确告诉大黄蜂使用optirun
或primusrun
命令打开nvidia卡:
optirun myopenclprogram
但是请注意,因为所有重要的是nvidia卡打开和驱动程序被加载 ,你不需要继续使用optirun myprogram
得到这个工作(因为这总是包括等待显卡的初始延迟被初始化)。
例如你可以运行optirun kate
,这将打开nvidia显卡。 然后,你可以在一个单独的终端上运行opencl程序,而不需要optirun,因为显卡已经打开(只要你离开,例如kate运行),它就可以正常工作。
你会注意到这次启动程序没有任何延迟! 这样可以节省很多的等待时间 – 特别是如果你正在开发opencl程序。
再一次,只要你保持打开nvidia显卡,你的opencl程序将工作。
我可能会联系大黄蜂的开发者,看看是否有更简单的方法来使这个工作,并报告他们在这里说什么。 希望有一些方法来打开和关闭nvidia卡,而不需要保持一个程序(如我的例子中的凯特)运行。
我希望这有助于任何人试图在未来的大黄蜂使用Linux笔记本电脑上使用OpenCL(我自己也找不到任何明确的解决方案)
EDIT2 :打开和关闭你的图形卡可以按照以下步骤为Bumlebee用户完成:
打开显卡并加载nvidia模块
sudo tee /proc/acpi/bbswitch <<< ON sudo modprobe nvidia
关闭显卡(nvidia模块自动卸载)
sudo tee /proc/acpi/bbswitch <<< OFF