GPU 是图形处理单元(Graphic Processing Unit) 的简称,最初主要用于图形渲染。自九十年代开始,GPU 的发展产生了较大的变化,NVIDIA 、AMD(ATI) 等GPU 生产商敏锐的观察到GPU 天生的并行性,经过他们对硬件和软件的改进,GPU 的可编程能力不断提高,GPU 通用计算应运而生。由于GPU 具有比CPU 强大的计算能力( 见图1- 1),为科学计算的应用提供了新的选择。
注:以上图片上传到红联Linux系统教程频道中。
由于GPU 拥有比CPU 更强的计算能力,很早就有人想到将GPU 应用到通用计算上,这就是GPGPU ,所谓GPGPU 是指 直接使用了图形学的API ,将任务映射成纹理的渲染过程,使用汇编或者高级着色器语言Cg ,HLSL 等编写程序,然后通过图形学API 执行(Direct3D 和OpenGL ),这样的开发不仅难度较大,而且难以优化,对开发人员的要求非常高,因此,传统的GP GP U 计算并没有广泛应用。
2007 年6 月,NVIDIA 公司推出了CUDA(Compute Unified Device Architecture) ,CUDA 不需要借助图形学API ,而是采用了类C 语言进行开发。同时,CUDA 采用了统一处理架构,降低了编程的难度,使得NVIDIA 相比AMD/ATI 后来居上。相比AMD 的GPU ,NVIDIA GPU 引入了片内共享存储器,提高了效率。 这两项改进使CUDA 架构更加适合进行GPU 通用计算。由于这些特性,CUDA 推出后迅速发展,被应用于石油勘测、天文计算、流体力学模拟、分子动力学仿真、生物计算、图像处理、音视频编解码等领域。
CUDA 直接采用C/C++ 编译器作为前端(如Linux 下的gcc,windows 下的vs ),以C/C++ 语法为基础设计,因此对熟悉C 系列语言的程序员来说,CUDA 的语法比较容易掌握。但是这并不意味着CUDA 容易,整体来说CUDA 是相当难的,难在优化,难在开发出健壮、可扩展性的程序;难在没有成熟的库和算法以借用。从语言的角度说,CUDA 只对ANSI C 进行了最小的必要扩展,以实现其关键特性-- 线程按照两个层次进行组织、共享存储器和栅栏同步。这些关键特性使得CUDA 拥有了两个层次的并行:线程级并行实现的细粒度数据并行,和任务级并行实现的粗粒度并行。
已经简单了说了一下CUDA,为了能够使用CUDA开发,这一节将说明怎样构建CUDA开发环境。
本节介绍在Ubuntu操作系统和gcc前端的基础上安装CUDA开发环境。
首先,要保证自己机器上的gcc能够使用,因为Ubuntu缺少gcc的一些包和g++,所以这些得自己安装。安装命令:sudo apt-get install g++,待其完成后,弄个C代码试试看,当然你得保证你的显卡支持CUDA。
其次,到nVidia官方网站上下载对应操作系统的驱动(driver)和工具包(toolkit)。
再次,转换到控制台,命令为Ctrl+Alt+F1/F2/F3/F4,关掉gdm,命令为:sudo /etc/init.d/gdm stop,要确定已经关闭,否则在安装时会提示你有x server程序在运行。
再次,进入driver和toolkit目录,执行安装命令,为了方便,请一定按照默认安装。命令sudo sh ./dev………………
sudo sh ./nv…………
然后,打开个人目录下的.bashrc文件或者/etc/profile文件,在其中加入命令:PATH=${PATH}:/usr/local/cuda/bin/ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda/lib,执行source .bashrc或者/etc/profile,依据你添加PATH和LD_LIBRARY_PATH时修改了那个文件确定。
最后执行nvcc命令,看看,如果提示你没有输入文件,就安装完成了。
如果你要安装SDK的话,还得安装一些包,依据make时的提示,搜索和新力得应该可以搞定一切,现在你可以享受CUDA了。