GPU相关知识

来源:互联网 发布:北京知金教育论坛 编辑:程序博客网 时间:2024/05/17 04:54

GPU(Graphics Processing Unit,简称GPU),是进行图像运算工作的微处理器。

中心处理器(CentralProcessing Unit, CPU)是计算机系统的计算和控制核心,在轨道设计中使用计算机程序进行研究和仿真都依赖于CPU的强大计算能力,是研究者经常接触并且熟悉的概念。图形处理器(Graphics Processing Unit, GPU)是计算机设备中用来进行绘图运算,支持显示器设备的芯片。GPU的计算速度和指令复杂度远不及CPU,但是由于其支持高刷新率高分辨率显示设备的需求,GPU具有高并行数、大数据吞吐量的特征,并且在这方面的能力远高于CPU。早在2001年左右,便有人提出了基于GPU的通用计算(General-purpose computing ongraphics processing units, GPGPU)的概念,利用GPU的强大的并行计算能力和相对的低功耗来加速科学计算。基本思路是把需要计算的数据打包成GPU可以处理的图像信息,然后利用处理图像信息的运算来实现科学计算。直到2008年左右,NVIDIA公司推出了CUDA(Compute Unified Device Architecture)并行计算架构,代替了GPGPU的概念,并发布了支持C,C++,Fortran的函数库和编译器。CUDA是NVIDIA发明的一种并行计算平台和编程模型。它通过利用图形处理器 (GPU) 的处理能力,可大幅提升计算性能。此后经过一系列的发展和迭代,现在CUDA已经能够支持符合IEEE标准的双精度运算,并且支持越来越丰富的流程控制,至于是多维数组和显存动态分配等功能。

了解GPU的物理结构和动作方式,在一定程序上有助于提高代码的效率,也有且于开发和调试程序。下面是GPU型号GTX850M,简要介绍一下GPU的物理结构。如下图所示,该GPU核心的实际运算单位有640个,即每个绿色的小块代表的最基础的计算单元流处理器(Streaming Process,SP),它们在GPU内部被组织成不同的结构,来实现常用的图像处理功能。


(来自https://sanwen8.cn/p/14bJc10.html)


上图是计算结构的放大图,一行中的每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。





原创粉丝点击