GPU简介及高性能并行计算.doc
文本预览下载声明
第一章.GPU的诞生
NVIDIA公司在1999年发布GeForce 256图形处理芯片时首先提出GPU的概念。GPU的图形(处理)流水线完成如下的工作:(并不一定是按照如下顺序) 顶点处理:这阶段GPU读取描述3D图形外观的顶点数据并根据顶点数据确定3D图形的形状及位置关系,建立起3D图形的骨架。在支持DX8和DX9规格的GPU中,这些工作由硬件实现的Vertex Shader(定点着色器)完成。 光栅化计算:显示器实际显示的图像是由像素组成的,我们需要将上面生成的图形上的点和线通过一定的算法转换到相应的像素点。把一个矢量图形转换为一系列像素点的过程就称为光栅化。例如,一条数学表示的斜线段,最终被转化成阶梯状的连续像素点。 纹理帖图:顶点单元生成的多边形只构成了3D物体的轮廓,而纹理映射(texture mapping)工作完成对多变形表面的帖图,通俗的说,就是将多边形的表面贴上相应的图片,从而生成“真实”的图形。TMU(Texture mapping unit)即是用来完成此项工作。 像素处理:这阶段(在对每个像素进行光栅化处理期间)GPU完成对像素的计算和处理,从而确定每个像素的最终属性。在支持DX8和DX9规格的GPU中,这些工作由硬件实现的Pixel Shader(像素着色器)完成。 最终输出:由ROP(光栅化引擎)最终完成像素的输出,1帧渲染完毕后,被送到显存帧缓冲区。 总结:GPU的工作通俗的来说就是完成3D图形的生成,将图形映射到相应的像素点上,对每个像素进行计算确定最终颜色并完成输出。如今的游戏,单单从图象的生成来说大概需要下面四个步骤: 1、Homogeneous coordinates(齐次坐标) 2、Shading models(阴影建模) 3、Z-Buffering(Z-缓冲) 4、Texture-Mapping(材质贴图) 在这些步骤中,显示部分(GPU)只负责完成第三、四步,而前两个步骤主要是依靠 CPU 来完成。而且,这还仅仅只是3D图象的生成,还没有包括游戏中复杂的AI运算。场景切换运算等等……无疑,这些元素还需要CPU去完成,这就是为什么在运行《魔兽世界》的时候,当场景切换时再强劲的显卡都会出现停顿的现象。首先从硬盘中读取模型, CPU分类后将多边形信息交给GPU,GPU再时时处理成屏幕上可见的多边形,但是没有只有模型出来后GPU将模型数据放进,显卡同时也为模型贴材质,给模型上颜色。CPU相应从中获取多边形的信息。然后计算光照后产生的影子的轮廓CPU计算出后,显卡的工作又有了,那就是为影子中填充深的颜色这一点要注意的是,无论多牛的游戏家用显卡,光影都是CPU计算的,GPU只有2个工作,1多边形生成。2为多边形上颜色。 传统的GPU基于SIMD的架构。SIMD即Single Instruction Multiple Data,单指令多数据。 其实这很好理解,传统的VS和PS中的ALU(算术逻辑单元,通常每个VS或PS中都会有一个ALU,但这不是一定的,例如G70和R5XX有两个)都能够在一个周期内(即同时)完成对矢量4个通道的运算。比如执行一条4D指令,PS或VS中的ALU对指令对应定点和像素的4个属性数据都进行了相应的计算。这便是SIMD的由来。这种ALU我们暂且称它为4D ALU。 需要注意的是,4D SIMD架构虽然很适合处理4D指令,但遇到1D指令的时候效率便会降为原来的1/4。此时ALU 3/4的资源都被闲置。为了提高PS VS执行1D 2D 3D指令时的资源利用率,DirectX9时代的GPU通常采用1D+3D或2D+2D ALU。这便是Co-issue技术。这种ALU对4D指令的计算时仍然效能与传统的ALU相同,但当遇到1D 2D 3D指令时效率则会高不少,例如如下指令: ADD R0.xyz , R0,R1 //此指令是将R0,R1矢量的x,y,z值相加 结果赋值给R0 ADD R3.x , R2,R3 //此指令是将R2 R3矢量的w值相加 结果赋值给R3 对于传统的4D ALU,显然需要两个周期才能完成,第一个周期ALU利用率75% ,第二个周期利用率25%。而对于1D+3D的ALU,这两条指令可以融合为一条4D指令,因而只需要一个周期便可以完成,ALU利用率100%。 但当然,即使采用co-issue,ALU利用率也不可能总达到100%,这涉及到指令并行的相关性等问题,而且,更直观的,上述两条指令显然不能被2D+2D ALU一周期完成,而且同样,两条2D指令也不能被1D+3D ALU一周期完成。传统GPU在对非4D指令的处理显然不是很灵活。GPU的功能更新很迅速,平均每一年多便有新一代的GPU诞生,运算速度也越来越快。2004年,2004年推出的GPU Nvi
显示全部