C++ 使用Optimus技术让OpenCL在Linux笔记本电脑上工作

C++ 使用Optimus技术让OpenCL在Linux笔记本电脑上工作,c++,linux,ubuntu,opencl,C++,Linux,Ubuntu,Opencl,我在我的笔记本电脑上安装了Kubuntu 13.10,它有一台采用optimus技术的Nvidia GT555m。用OpenCL编译C++代码时,我遇到了一些麻烦。 我经常遇到的错误是找不到-lOpenCL。使用GNU find实用程序进行快速搜索会得到以下结果: /usr/lib32/nvidia-319/libOpenCL.so.1 /usr/lib32/nvidia-319/libOpenCL.so /usr/lib32/nvidia-319/libOpenCL.so.1.0 /usr/l

我在我的笔记本电脑上安装了Kubuntu 13.10,它有一台采用optimus技术的Nvidia GT555m。用OpenCL编译C++代码时,我遇到了一些麻烦。 我经常遇到的错误是
找不到-lOpenCL
。使用GNU find实用程序进行快速搜索会得到以下结果:

/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部分?我不明白的是——在哪里可以找到它

您应该安装。它包含OpenCL开发库并包括。

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

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


你需要安装nVIDIA的Propitary驱动程序:要么使用Ubuntu工具,要么安装软件包
nVIDIA current

我不使用Kubuntu,但我在Mageia release 6 Linux下得到了它,所以我想它应该非常类似。在我的笔记本电脑里有Intel和Nvidia(GeForce GTX 980M)图形卡。我的意图是只运行OpenCL编译的代码,而不设置任何Xorg图形服务器

所以,正如上面DarkZeros所建议的,我只使用了一个专有的nvidia驱动程序(在我的例子中是从nvidia页面下载的)。然后在根用户下:

./NVIDIA-Linux-x86_64-375.39.run --no-opengl-files
它问我是否想修改Xorg配置——我说“不”。这交付了nvidia内核模块。接下来,我修改了/etc/modules,让Linux知道应该在系统启动时加载它们(在Kubuntu上可能会有所不同)

事实就是这样。重新启动系统并加载模块时,还应在/dev目录下自动创建正确的nvidia设备文件

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

我的灵感来自[

我从我的软件包管理器安装了cuda 5.0和相关的开发包(这是大多数Ubuntu用户建议的)。但是我仍然会遇到同样的错误(找不到-lOpenCL)@MichaelAquilina我不知道ubuntu软件包。你是否尝试添加链接dirs的路径:
-L/usr/lib32/nvidia-319/
?是的,我做了一些工作,但编译不好。我不知道应该选择哪个版本的库。我安装的libopencl开发软件包将libopencl.so文件放在/usr/lib/x8中6_6 4-linux-gnu和/usr/include中的相应标题。但是,如果我尝试将其添加到我的库路径,它会抱怨找不到lOpenCL!nvidia-319路径中的一个似乎不想在我添加一些基本命令后立即为我编译,但至少它不会抱怨找不到lOpenCL:/
[root@localhost ~]# ls /dev/nvidia*
/dev/nvidia0  /dev/nvidiactl  /dev/nvidia-uvm  /dev/nvidia-uvm-tools