上图是计算结构的放大图,一行中的每4个SP和一些共用的存储资源等被组织成一个流多处理器(Stream Multiprocessor,SM);每8个SM,即每8行,添加一些指令调度功能构成一个warp,是GPU中最小的调度单元。在直接调用CUDA进行C/C++编程时,多个计算thread被组成一个block,然后多个block被组织一个grid,最终GPU按照block来调度所有任务在每个warp上进行计算。可以想象,每个block中thread个数,每个grid中block个数的划分,都会影响到能否充分利用GPU的计算能力,而合理的选择即需要不断的尝试,也需要对并行计算算法的理解和较高水下的编辑能力,是一个极其复杂的过程。
用途是将计算机系统所需要的显示信息进行转换驱动,并向显示器提供扫描信号,是显卡的处理器。与CPU类似,不过GPU是专为执行复杂的数学和几何计算设计的,这些计算是图形渲染必需的。GPU可以提供数十倍或者上百倍于CPU的性能。 GPU通用计算方面的标准有OpenCL, CUDA, ATI, STREAM。其中OPENCL(Open Computing Language,开放运算语言)是第一个面型异构系统通用目的并行编程的开放式,免费标准,也是一个统一的编程环境。
NVIDIA公司在1999年发布GeForce 256图形处理芯片时首先提出GPU的概念。从此NV显卡的芯就用这个新名字GPU来称呼。GPU使显卡削减了对CPU的依赖,并实行部分原本CPU的工作,更加是在3D图形处理时。GPU所采用的核心技术有硬体T&L、立方环境材质贴图与顶点混合、纹理压缩及凹凸映射贴图、双重纹理四像素256位渲染引擎等,而硬体T&L技术能够说是GPU的标志。
GPU在几个主要方面有别于DSP(Digital Signal Processing,简称DSP,数字信号处理)架构。其所有计算均使用浮点算法,而且此刻还没有位或整数运算指令。此外,由于GPU专为图像处理设计,因此存储系统实际上是一个二维的分段存储空间,包括一个区段号(从中读取图像)和二维地址(图像中的X、Y坐标)。此外,没有任何间接写指令。输出写地址由光栅处理器确定,而且不能由程序改变。这对于自然分布在存储器之中的算法而言是极大的挑战。最后一点,不同碎片的处理过程间不允许通信。实际上,碎片处理器是一个SIMD数据并行执行单元,在所有碎片中独立执行代码。
关于CUDA
CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。 开发人员现在可以使用C语言来为CUDA™架构编写程序,C语言是应用最广泛的一种高级编程语言。所编写出的程序于是就可以在支持CUDA™的处理器上以超高性能运行。CUDA3.0已经开始支持C++和FORTRAN。
更多的资料,可以查看http://blog.csdn.net/abcjennifer/article/details/42436727。