在Ubuntu下安装CUDA要比在Windows下稍微复杂和费事一些,尤其对于平台和一些其他依赖软件包的安装上要求多些。
Nvidia官方只提供了Ubuntu10.10下的CUDA的Toolkit,SDK,自己一开始是想在Ubuntu11.10上安装CUDA的,结果安装了编译时却出现很多错误并且提示gcc版本过高(Ubuntu11.10内核是2.6而默认安装编译的gcc是4.6的)后来重新又把gcc4.6卸载再装了gcc4.4。结果由于之前使用的是默认的Ubuntu开源的nvidia驱动,还是不能正常工作,又网上查了重新安装nvidia官方的驱动,却在安装驱动的时候提示后来装的gcc4.4与内核版本不一致,驱动程序也无法正常编译和安装。末了还把我系统上的很多重要软件包弄坏了,gcc也卸载不了。最终只好重新装回Ubuntu10.10。
经过几经折腾终于安装好了,后来在网上查了一下,貌似国外也有人遇到了类似的问题,只有一篇文章中提到将nvidia的CUDA在11.04上安装好了http://topic.csdn.net/u/20110809/13/281a50dc-605f-4b32-92bf-4193eeebf7ec.html问题的关键主要就是要用与系统内核版本相符的gcc来编译和安装nvidia的驱动程序,然后用CUDA要求的不高于4.6版本的gcc来编译CUDA程序,这样的话重要的就是切换两个版本的gcc链接,而至于自己编译的CUDA程序和系统和之间是否还会有问题则不得而知了,总的说来还是就用与官方提供的版本一致的系统会更可靠些。
不过,自己暂时也不想再换回Ubuntu11.10了,新出来的发行版兼容性也还需要改进,而且实际上做程序开发使用的系统也不用像桌面用户那么要求太新,关键是要求稳定,网上查了一下用Ubuntu10.10的人还是比较多的。现在把安装过程总结一下,以便下次用上。
Nvidia的SDK中的C/doc目录下有一个Getting_Started_Linux.pdf文档介绍了怎样安装和入门Linux下的CUDA,但是由于要针对不同的Linux发行版,所以有些地方相对介绍得比较大概,但是大部分步骤是和其中一致的。下面正式开始安装步骤:
1.下载安装包和驱动程序
这部分参见前面开发软件下载部分,主要去http://developer.nvidia.com/cuda-downloads下载。
下载后需要的四个文件如下图所示:
2.验证系统和安装相关的软件包
安装和后面开发程序时,都需要管理员root权限,建议是直接用root用户登陆系统之后安装,省得每操作一下又要输入密码。
首先和Windows平台下一样先验证nvidia显卡,在终端中输入命令:
lspci | grep -i nvidia
我的电脑上运行结果如下:
接下来验证Ubuntu系统,获得系统版本信息,在终端输入命令如下:
uname -m && cat /etc/*release
我的电脑上运行结果如下:
再验证gcc版本,如果没有相关信息,则需要安装。输入如下命令:
gcc –version
我的电脑上运行结果如下:
实际上编写CUDA程序时还会用到g++,所以将其安装上。
为了编译和运行SDK中的示例,还需要freeglut、mesa和opengl相关库和头文件等支持,Getting_Started_Linux.pdf文档中建议通过如下命令行安装:
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
如果没有安装上build-essential,编译时会出现错误“g++: Command not found”,
没有安装freeglut、mesa和opengl库时会在CUDA的SDK程序编译时给出错误“cannot find -lXi -lXmu -lglut”,如下图所示:
这些错误在自己一开始没有安装时都遇上了,后来看Getting_Started_Linux.pdf文档和nvidia论坛的帖子http://forums.nvidia.com/index.php?showtopic=171590
才明白过来的。
Getting_Started_Linux.pdf文档中还提到如果先安装了nvidia的驱动程序再安装mesa库会导致编译时提示/usr/lib/libGL.so文件找不到的错误“cannot find -lGLU”。这主要是由于安装mesa库时会重写安装nvidia驱动时创建的/usr/lib/libGL.so文件。因而最好是先安装了这些库,再装驱动,以免反序安装造成不得不重新再装一次驱动以解决错误“cannot find -lGLU”。帖子http://topic.csdn.net/u/20110809/13/281a50dc-605f-4b32-92bf-4193eeebf7ec.html中是先安装了nvidia驱动,然后把/usr/lib/libGL.so文件备份,然后安装完freeglut、mesa和opengl库之后再恢复回去,也是个可行的办法。
3.安装nvidia驱动
如果是刚装好的Ubuntu系统,其中的开源的nvidia显卡驱动是没有激活的,可以直接安装nvidia官方下载的驱动,而如果已经激活了则需要先将其卸载掉再安装nvidia官方下载的驱动。
删除以前激活的显卡驱动或者旧版本的nvidia官方驱动,在终端中输入如下命令:
sudo apt-get –purge remove nvidia-*
sudo apt-get --purge remove xserver-xorg-video-nouveau
然后重启电脑,在登录界面或者登陆之后按快捷键Ctrl + Alt+F1到第一控制台。ubuntu在字符界面输入root用户名和密码之后。
如果是不需要卸载nvidia驱动的情况则可以不重启而直接按快捷键Ctrl + Alt+F1到第一控制台,不过此时则需要多一个步骤,即输入如下命令把gui服务关闭:
sudo stop gdm
如果是Ubuntu11.04以上版本则应该输入如下命令:
sudo stop lightgdm
如果是Ubuntu10.10以前版本则应该输入如下命令:
sudo /etc/init.d/gdm stop
接着通过cd命令切换到之前下载的显卡驱动程序的目录,通过命令:
sudo sh 驱动程序全名
如我自己的电脑上输入的是:
sudo sh devdriver.run
回车之后就进入了安装界面。第一个界面选择“accept”接受安装协议,第二个界面,第二个界面选择“yes”,后面的也都选“OK”或者“yes”就可以一路安装完毕了。
安装完之后会重新返回字符界面,此时需要重新开启gui服务才会再返回到图形界面,输入如下命令启动gui的服务:
sudo start gdm
如果是Ubuntu11.04以上版本则应该输入如下命令:
sudo start lightgdm
如果是Ubuntu10.10以前版本则应该输入如下命令:
sudo /etc/init.d/gdm start
最后按快捷键Ctrl + Alt+F7返回到图形界面,这样nvidia显卡官方驱动就安装完成了。
有些主板,如独立显卡情况下,可能还需要设置一下grub才能支持nvidia的显卡,不然可能重启之后无法正常进入图形界面:
打开系统中的grub配置文件:
sudo gedit /etc/default/grub
把 “nomodeset”参数加到 GRUB_CMDLINE_LINUX行:
GRUB_CMDLINE_LINUX=”nomodeset”
并更新 grub:
sudo update-grub
4.安装CUDA所需的cudatoolkit、cudatools和gpucomputingsdk
这部分则非常简单了,网上有一些文章是通过终端sh命令启动安装的,而实际上可以直接将这些以.run为后缀的文件的属性设置为“允许文件执行”就可以直接通过鼠标右键单击的“打开”菜单命令安装,如下图所示:
在弹出的对话框中选择最右边的“命令行”按钮即会弹出命令行窗口并给出相应的安装提示。其中主要是提示是否设置toolkit等的安装路径,使用默认的路径即可,因而只需要一路回车就可以完成这三个软件包的安装。
默认CUDA Toolkit和CUDA Tools是安装在/usr/local/cuda路径下,
安装在$(HOME)/NVIDIA_GPU_Computing_SDK路径下。可以自己定义个简单的路径来安放SDK,默认的名字实在太长了。
安装顺序建议为cudatoolkit、cudatools、gpucomputingsdk,因为sdk安装时要引用toolkit的安装路径。
三个都安装完毕之后可以通过如下命令查看nvcc编译器的版本:
nvcc –V
后面注意那个“V”是大写的,如果能够如下图所示正常看到其版本则表明toolkit安装正确了。
安装完之后为了能够编译示例程序和自己写的CUDA应用程序,还需要设置环境变量,输入命令:
sudo gedit ~/.bashrc
然后如果是32位的Linux系统在打开文件的末尾添加:
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib:$LD_LIBRARY_PATH
如果是64位的Linux系统则在打开文件的末尾添加:
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/64:$LD_LIBRARY_PATH
保存文件并关闭,最后更新一下:
~/.bashrc
5.运行SDK例子测试开发环境
在终端中切换到SDK的安装路径:
cd /(HOME)/NVIDIA_GPU_Computing_SDK/C
其中HOME为自己的用户名,如root用户下:
cd /root/NVIDIA_GPU_Computing_SDK/C
然后直接编译:
make
但是在自己的电脑上编译时出错,提示“error:kernel lauches from templates are not allowed in system files”,如下图所示
貌似是烟雾粒子示例没有编译通过,原因还没有找出来,nvidia论坛中也有人遇到这样的情况也尚未解决。
不过偶然看到英国的一个网站https://amcg.ese.ic.ac.uk/~fr710/wiki/dev/cuda/start
中给出了问题的解释,原文如下:
nvccerrors
kernellaunches from templates are not allowed in system files
occurswhenever a kernel is launched from a template class or function that isdeclared in a header residing in a standard include path of the compiler
Note: thisapplies also to include path expansion e.g. through the CPLUS_INCLUDE_PATHenvironment variable
Solution:the include path for thecorresponding headers must be specified by a -I flag to the compiler
意思是说:这个错误在内核从一个在编译器标准的引用路径的头文件中声明的模板类或者函数中启动时发生。
注意:这种错误同样在CPLUS_INCLUDE_PATH环境变量中包含了相关的引用路径时发生。解决办法是为对应的包含路径的头文件在编译选项中指定一个-l标志。
既然无法全部编译通过也就只好切换到源代码路径
cd /root/NVIDIA_GPU_Computing_SDK/C/src然后再进入自己感兴趣的示例项目文件夹下去make,应该大多数例子就没有什么问题了。这里主要对deviceQuery、bandwidthTest、bicubicTexture、bilateralFilter四个示例进行编译和测试。
分别进入目录编译,如下图所示
编译完之后进入生成文件夹,运行各个示例,如运行deviceQuery则输入命令:
./ deviceQuery
回车即可运行并打印出检测到的GPU设备和其对应的CUDA的一些信息:
运行数据传输带宽bandwidthTest测试例子
运行双边滤波bilateralFilter测试例子
运行双立方纹理bicubicTexture测试例子
由上可见其运行效果和在Windows中是一致的。
不过有时编译时能够通过,可是运行时却提示这样的错误:“X error of failed reques:BadWindows (invalid Windows parameter)”
按其意思是说程序中opengl的窗口参数设置错误,实际上不是。这个问题通常是由于系统更新,如运行了sudo apt-get upgrade命令等更新了系统中的X服务改写了之前安装的nvidia显卡的一些文件造成的,重新按前面的步骤安装一次nvidia的显卡驱动即可解决。可以参考http://www.linuxdiyf.com/bbs/viewthread.php?tid=194013
6.Linux下CUDA编程的一些资源
CSDN
http://forum.csdn.net/SList/CUDA_Linux/
Nvidia
http://forums.nvidia.com/index.php?s=67988942b49f28d483a57faf0e34af94&showforum=68
参考文献:
ubuntu10.10下显卡驱动的安装及3D特效的开启
http://www.cnblogs.com/ini_always/archive/2011/04/04/2004987.html
ubuntu下实践编译安装Nvidia显卡驱动
http://www.sinoll.com/archives/569#respond
在Ubuntu10.10下搭建CUDA 4.0平台
http://blog.sina.com.cn/s/blog_8164a3130100s9ax.html
ubuntu 10.10下安装与配置CUDA 4.0 .
http://blog.csdn.net/dreampursue/article/details/6359432