让OpenCL在Optimus技术的Linux笔记本电脑上工作

我在我的笔记本电脑上安装了Kubuntu 13.10,它配有Optimus技术的Nvidia GT555m。 我在使用OpenCL编译C ++代码时遇到了一些麻烦。

我不断收到的错误是Cannot find -lOpenCL 。 使用GNU find实用程序进行快速search给了我以下内容:

 /usr/lib32/nvidia-319/libOpenCL.so.1 /usr/lib32/nvidia-319/libOpenCL.so /usr/lib32/nvidia-319/libOpenCL.so.1.0 /usr/lib32/nvidia-319/libOpenCL.so.1.0.0 /usr/lib/x86_64-linux-gnu/libOpenCL.so /usr/lib/nvidia-319/libOpenCL.so.1 /usr/lib/nvidia-319/libOpenCL.so /usr/lib/nvidia-319/libOpenCL.so.1.0 /usr/lib/nvidia-319/libOpenCL.so.1.0.0 

我安装了以下OpenCL开发包:

 opencl-headers nvidia-opencl-dev 

我也尝试了实用clinfo ,看看我是否得到任何信息,但我得到以下错误:

 clinfo: error while loading shared libraries: libOpenCL.so.1: cannot open shared object file: No such file or directory 

有没有人有任何经验在他们的optimus笔记本电脑上使用OpenCL设置Linux开发环境?

我的印象是,我不需要做任何事情就能做到这一点。

编辑 :好吧,似乎我没有pipe理编译的原因是因为我混合了头和库。 使用以下编译我的代码:

 g++ -std=c++11 -I /usr/local/cuda-5.5/include vadd.cpp -L /usr/lib/nvidia-331 -lOpenCL 

现在我在运行时遇到另一个错误(但至less我设法编译!)。 错误如下:

 ERROR: clGetPlatformIDs -1001 

从做一些研究这意味着我可能没有安装nvidias工具包的ICD部分? 我无法理解的是 – 在哪里可以find它!

你应该安装Nvidia Cuda SDK 。 它包含OpenCL开发库和包含。

您不需要开发包或库(OpenCL已经在那里,正在工作,只是给你一个运行时错误,ICD是存在的)。 你需要的是一个准备好执行OpenCL代码的平台,所以一个GPU +一个驱动程序。

您需要安装nVIDIA的专有驱动程序:使用Ubuntu工具,或者安装nvidia-current软件包。

也许你必须安装bublebee 。 使用Optimus技术在Nvidia卡上使用Cuda的库。

我不使用Kubuntu,但我得到它在Mageia发布6 Linux下工作,所以我想它应该是非常相似。 在我的情况下,在我的笔记本电脑中有英特尔和Nvidia(GeForce GTX 980M)图形卡。 我的目的是在没有任何Xorg图形服务器的情况下运行只有OpenCL编译的代码。

所以,正如上面DarkZeros所建议的那样,我只使用了专有的nvidia驱动程序(在我的情况下是从Nvidia页面下载的)。 然后在root用户下:

 ./NVIDIA-Linux-x86_64-375.39.run --no-opengl-files 

它问我是否想修改我的Xorg配置 – 我说“不”。 这提供了nvidia内核模块。 接下来,我修改了/ etc / modules,让Linux知道它应该在系统启动时加载它们(这可能与Kubuntu不同)

 [root@localhost ~]# cat /etc/modules nvidia nvidia-uvm nvidia-drm nvidia-modeset 

而那是真的。 重新启动系统,加载模块应该自动在/ dev目录下创建正确的nvidia设备文件。

 [root@localhost ~]# ls /dev/nvidia* /dev/nvidia0 /dev/nvidiactl /dev/nvidia-uvm /dev/nvidia-uvm-tools 

我从[ ftp://download.nvidia.com/XFree86/Linux-x86/295.59/README/optimus.html%5D [ 1]