GPU,学名可编程图形处理单元,俗称可编图形硬件,一般被行外称为显卡(GPU不是显卡,它是显卡中的核心处理单元)。
GPU概念产生于20世纪70、80年代交替年间,主要用于游戏和视频游戏方面,那时的全部战力仅仅能够快速合成几张图片。十年后,80、90年代交替时,出现了基于数字信号处理芯片,它的主要特点就是贵,当然性能得到了极大提高。1991、1995年对2D加速器的支持得到升级。
1998年是划时代的一年, NVIDIA(英伟达)宣布modern GPU研发成功,进入GPU可编程时代,是历史性突破。与之前的GPU不同,程序员可以将代码运行在GPU的处理单元中,而之前的GPU仅仅能处理固定功能,一旦设计完成,用户不能根据需求扩展功能,最多可以参与简单的设置(固定管线着色器)。
1998年后,modern GPU的发展又分为四个阶段:
第一代,代表者有NVIDIA的TNT2、 ATI的Grage 、3Dfx的Voodoo3。这一时期的GPU功能很有限,只能用于纹理组合的数学计算,或者像素值的计算。
第二代,1999年到2000年(都是时代之交),这一时期的GPU具备了三维坐标转换和光照计算能力,OpenGL和DirectX7(图形接口簇)相继支持应用程序通过硬件进行坐标变换。同时对纹理的操作扩展到3维的CubeMap。代表作有NVIDDIA的GeForce256、MAX, ATI的Radeon 7500等。
第三代,2001年,支持顶点编程能力的显卡面世(暂不支持像素编程能力)。
第四代,至今,市面的显卡同时支持了顶点(vertex)和片段(fragment,也可翻译成片元)编程能力。当前课程中的重要一环就是“顶点和片段着色器”。
那么同学们想一想,为什么要发展GPU呢?CPU不是也能执行程序吗?还要显卡做什么呢?
先来看一张图:
GPU:控制器少,计算单元多。
CPU:控制器很大,计算单元则很少。这里不要纠结计算单元的面积大小,这只是示意图。
GPU采用流式并行计算模式,每一个计算单元可以单独负责一个像素点,每个像素点不依赖旁边像素点的数据,所以每个计算单元都是独立并行的,不需要控制器额外干涉。
CPU处理则与之不同,线性处理较多,这条数据的可能依赖上一条数据的结果,同时还需要控制器参与取指令,指出下一条指令在内存中的位置。所以CPU的结构不适合独立的像素运算(像素一个一个的算效率极低)。
GPU在控制方面弱于CPU,但在并发算力方面远远胜于CPU。例如黑客们破解密码时,需要大量的尝试性计算,他们首选必是GPU。
所以,但看计算能力,GPU由于高并发能力,算力远远大于CPU;但说到分布、有序、控制力上,CPU要胜过GPU。