CUDA简介
CUDA是什么
CUDA,Compute Unified Device Architecture的简称,是由NVIDIA公司创立的基于他们公司生产的图形处理器GPUs(Graphics Processing Units,可以通俗的理解为显卡)的一个并行计算平台和编程模型。
通过CUDA,GPUs可以很方便地被用来进行通用计算(有点像在CPU中进行的数值计算等等)。在没有CUDA之前,GPUs一般只用来进行图形渲染(如通过OpenGL,DirectX)。
开发人员可以通过调用CUDA的API,来进行并行编程,达到高性能计算目的。NVIDIA公司为了吸引更多的开发人员,对CUDA进行了编程语言扩展,如CUDA C/C++,CUDA Fortran语言。注意CUDA C/C++可以看作一个新的编程语言,因为NVIDIA配置了相应的编译器nvcc,CUDA Fortran一样。更多信息可以参考文献。
位Ubuntu12.04安装CUDA5.5
具体步骤请点击此处
。
[b
]对CUDA C的个人懵懂感觉
[/b]
如果粗暴的认为C语言工作的对象是CPU和内存条(接下来,称为主机内存),那么CUDA C工作的的对象就是GPU及GPU上的内存(接下来,称为设备内存),且充分利用了GPU多核的优势及降低了并行编程的难度。一般通过C语言把数据从外界读入,再分配数据,给CUDA C,以便在GPU上计算,然后再把计算结果返回给C语言,以便进一步工作,如进一步处理及显示,或重复此过程。
主要概念与名称
主机
将CPU及系统的内存(内存条)称为主机。
设备
将GPU及GPU本身的显示内存称为设备。
线程(Thread)
一般通过GPU的一个核进行处理。(可以表示成一维,二维,三维,具体下面再细说)。
线程块(Block)
1. 由多个线程组成(可以表示成一维,二维,三维,具体下面再细说)。
2. 各block是并行执行的,block间无法通信,也没有执行顺序。
3. 注意线程块的数量为不超过65535(硬件)。
线程格(Grid)
由多个线程块组成(可以表示成一维,二维,三维,具体下面再细说)。