我的笔记本电脑上安装了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部分?我无法理解的是 - 在哪里找到它!
答案 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]
获得灵感