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

在最终设法让我的代码与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本身?)

好吧,所以我设法解决这个问题后,大量的努力。

有两件事我需要做:

让ICD工作

创建从/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擎天柱与大黄蜂

之所以这么复杂的工作是因为我有一个nvidia optimus笔记本电脑在Linux上的驱动程序支持不佳。 为了解决这个问题,我安装了bumblebee以允许在我的nvidia卡和intel卡之间切换。

但是,因为我使用大黄蜂 – NVIDIA显卡(和NVIDIA驱动程序)将被卸载,除非明确告知。 为了使用OpenCL,我们需要打开nvidia显卡。

要做到这一点,我们需要明确告诉大黄蜂使用optirunprimusrun命令打开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