使用Optimus技术让OpenCL在Linux笔记本电脑上运行

时间:2013-12-01 18:24:35

标签: c++ linux ubuntu opencl

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

我一直得到的错误是Cannot find -lOpenCL。使用GNU查找实用程序进行快速搜索可以得到以下结果:

/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开发环境?

我的印象是,我不需要做任何想要让它工作的事情。

编辑:好吧,似乎我无法编译的原因是因为我混合了标题和库。使用以下代码很好地编译我的代码:

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

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

ERROR: clGetPlatformIDs
-1001

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

4 个答案:

答案 0 :(得分:1)

您应该安装Nvidia Cuda SDK。它包含 OpenCL 开发库并包含。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我不使用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][1]

获得灵感