计算机图形学GPU编程技术学习资料:一、ProgrammableGraphicsProcessingUnit发展历程二、G PU和CPU三、GPU图形绘制管线四、ShadeLanguage(着色语言)武汉大学电子信息学院王泉德qdw ang@sohu.comGPUProgrammingAndCgLanguagePrimer1rdEdition(G PU编程与CG语言之阳春白雪下里巴人-康玉之)NVIDIA公司:CgUsersManualGPU概念在20世纪70 年代末和80年代初被提出20世纪80年代末到90年代初基于数字信号处理芯片(digitalsignalproces sorchip)的GPU1998年NVIDIA公司宣布modernGPU的研发成功,标志着GPU研发的历史性突破( 通常将20世纪70年代末到1998年的这一段时间称之为pre-GPU时期,而自1998年往后的GPU称之为modern GPU)modernGPU使用晶体管(transistors)进行计算,在微芯片(microchip)中,GPU所使用 的晶体管已经远远超过CPU。例如,Intel在2.4GHz的PentiumIV上使用5千5百万(55million)个 晶体管;而NVIDIA在GeForceFXGPU上使用超过1亿2千5百万(125million)个晶体管,在NVI DDIA7800GXT上的晶体管达到3亿2百万(302million)个自1998年后,ModernGPU的发 展历史可以分为4个阶段1998年NVIDIA宣布ModernGPU研发成功,标志着第一代ModernGPU的诞生:G PU功能非常有限,只能用于纹理组合的数学计算或者像素颜色值的计算1999到2000年,是第二代modernGPU的发展 时期:可以进行三维坐标转换和光照计算,支持立方体纹理cubemap2001年是第三代modernGPU的发展时期:允许应 用程序指定一个序列的指令进行顶点操作控制(GPU编程的本质!)第四代modernGPU的发展时期从2002年末到2003 年:支持vertexprogrammability和fragmentprogrammability,DirectX和Ope nGL也扩展了自身的API,用以支持vertexprogrammability和fragmentprogrammabili ty支持vertexprogrammability和fragmentprogrammability支持IEEE32 位浮点运算支持4元向量,4阶矩阵计算提供分支指令,支持循环控制语句具有高带宽的内存传输能力(>27.1GB/s)支持1 D、2D、3D纹理像素查询和使用,且速度极快支持绘制到纹理功能(RendertoTexture,RTT)目前最新的可编程 图形硬件已经具备了如下功能:GPU具有高并行结构(highlyparallelstructure),所以GPU在处理图 形数据和复杂算法方面拥有比CPU更高的效率PU采用流式并行计算模式,可对每个数据进行独立的并行计算(流内任意元素的计算不依赖 于其它同类型数据)CPU和GPU上的代码比较:提取2D图像上每个像素点的颜色值图形绘制管线可分为三个主要阶段应用程序阶 段,使用高级编程语言(C、C++、JAVA等)进行开发,主要和CPU、内存打交道,诸如碰撞检测、场景图建立、空间八叉树更新、视锥 裁剪等经典算法都在此阶段执行几何阶段,主要负责顶点坐标变换、光照、裁剪、投影以及屏幕映射,该阶段基于GPU进行运算,在该阶段的 末端得到了经过变换和投影之后的顶点坐标、颜色、以及纹理坐标光栅阶段,基于几何阶段的输出数据,为像素(Pixel)正确配色,以便绘 制完整图像,,每个像素的信息存储在颜色缓冲器(colorbuffer或者framebuffer)中shaderlangu age被定位为高级语言,如,GLSL的全称是“HighLevelShadingLanguage”,Cg语言的全称为“C forGraphic”,并且这两种shaderlanguage的语法设计非常类似于C语言。高级语言的一个重要特性是“独立 于硬件”,但是目前shaderlanguage完全依赖于GPU构架,任意一种shaderlanguage都必须基于图形 硬件,所以GPU编程技术的发展本质上还是图形硬件的发展。在shaderlanguage存在之前,展示基于图形硬件的编程能力只能 靠低级的汇编语言。使用shaderlanguage编写的程序称之为shaderprogram(着色程序)。着色程序分为两类 :vertexshaderprogram(顶点着色程序,运行在顶点处理器上)fragmentshaderprogram (片断着色程序,运行在片段处理器上)顶点着色程序从GPU前端模块(寄存器)中提取图元信息(顶点位置、法向量、纹理坐标等),并完 成顶点坐标空间转换、法向量空间转换、光照计算等操作,最后将计算好的数据传送到指定寄存器中;然后片断着色程序从中获取需要的数据,通常为“纹理坐标、光照信息等”,并根据这些信息以及从应用程序传递的纹理信息(如果有的话)进行每个片断的颜色计算,最后将处理后的数据送光栅操作模块。VertexShaderProgram |
|