《GPU编程技术.ppt》由会员分享,可在线阅读,更多相关《GPU编程技术.ppt(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、计算机图形学计算机图形学武汉大学电子信息学院 王泉德GPU编程技术学习资料:GPU Programming And Cg Language Primer 1rd Edition(GPU 编程与CG 语言之阳春白雪下里巴人-康玉之)NVIDIA 公司:CgUsersManual一、一、Programmable Graphics Processing Unit 发展历程nGPU 概念在20 世纪70 年代末和80 年代初被提出n20 世纪80 年代末到90 年代初基于数字信号处理芯片(digital signal processor chip)的GPU n1998 年NVIDIA 公司宣布mode
2、rn GPU 的研发成功,标志着GPU 研发的历史性突破(通常将20 世纪70 年代末到1998 年的这一段时间称之为pre-GPU 时期,而自1998 年往后的GPU 称之为modern GPU)modern GPU 使用晶体管(使用晶体管(transistors)进行计算,在微)进行计算,在微芯片(芯片(microchip)中,)中,GPU 所使用的晶体管已经远远超所使用的晶体管已经远远超过过CPU。例如,。例如,Intel 在在2.4GHz 的的Pentium IV上使用上使用5 千千5 百万(百万(55 million)个晶体管;而)个晶体管;而NVIDIA 在在GeForce FX
3、GPU 上使用超过上使用超过1 亿亿2 千千5 百万(百万(125 million)个晶)个晶体管,在体管,在NVIDDIA 7800 GXT 上的晶体管达到上的晶体管达到3 亿亿2 百万百万(302 million)个)个n自1998 年后,Modern GPU 的发展历史可以分为4 个阶段1998 年NVIDIA宣布Modern GPU 研发成功,标志着第一代Modern GPU 的诞生:GPU 功能非常有限,只能用于纹理组合的数学计算或者像素颜色值的计算1999 到2000 年,是第二代modern GPU 的发展时期:可以进行三维坐标转换和光照计算,支持立方体纹理cube map200
4、1 年是第三代modern GPU 的发展时期:允许应用程序指定一个序列的指令进行顶点操作控制(GPU 编程的本质!)第四代modern GPU 的发展时期从2002 年末到2003 年:支持vertexprogrammability 和fragment programmability,DirectX 和OpenGL 也扩展了自身的API,用以支持vertex programmability 和fragment programmabilityn支持vertex programmability 和fragment programmabilityn支持IEEE32 位浮点运算n支持4 元向量,4
5、阶矩阵计算n提供分支指令,支持循环控制语句n具有高带宽的内存传输能力(27.1GB/s)n支持1D、2D、3D 纹理像素查询和使用,且速度极快n支持绘制到纹理功能(Render to Texture,RTT)目前最新的可编程图形硬件已经具备了如下功能:nGPU 具有高并行结构(highly parallel structure),所以GPU 在处理图形数据和复杂算法方面拥有比CPU 更高的效率二、二、GPU和和CPUnPU 采用流式并行计算模式,可对每个数据进行独立的并行计算(流内任意元素的计算不依赖于其它同类型数据)CPU 和GPU 上的代码比较:提取2D 图像上每个像素点的颜色值n图形绘制
6、管线可分为三个主要阶段应用程序阶段,使用高级编程语言(C、C+、JAVA 等)进行开发,主要和CPU、内存打交道,诸如碰撞检测、场景图建立、空间八叉树更新、视锥裁剪等经典算法都在此阶段执行几何阶段,主要负责顶点坐标变换、光照、裁剪、投影以及屏幕映射,该阶段基于GPU 进行运算,在该阶段的末端得到了经过变换和投影之后的顶点坐标、颜色、以及纹理坐标光栅阶段,基于几何阶段的输出数据,为像素(Pixel)正确配色,以便绘制完整图像,每个像素的信息存储在颜色缓冲器(color buffer 或者frame buffer)中三、三、GPU 图形绘制管线图形绘制管线nshader language 被定位为
7、高级语言,如,GLSL 的全称是“High Level ShadingLanguage”,Cg 语言的全称为“C for Graphic”,并且这两种shader language 的语法设计非常类似于C 语言。n高级语言的一个重要特性是“独立于硬件”,但是目前shader language 完全依赖于GPU 构架,n任意一种shader language 都必须基于图形硬件,所以GPU 编程技术的发展本质上还是图形硬件的发展。在shader language存在之前,展示基于图形硬件的编程能力只能靠低级的汇编语言。四、四、Shade Language(着色语言)(着色语言)n使用shader
8、 language 编写的程序称之为shader program(着色程序)。着色程序分为两类:vertex shader program(顶点着色程序,运行在顶点处理器上)fragment shader program(片断着色程序,运行在片段处理器上)n顶点着色程序从GPU 前端模块(寄存器)中提取图元信息(顶点位置、法向量、纹理坐标等),并完成顶点坐标空间转换、法向量空间转换、光照计算等操作,最后将计算好的数据传送到指定寄存器中;n然后片断着色程序从中获取需要的数据,通常为“纹理坐标、光照信息等”,并根据这些信息以及从应用程序传递的纹理信息(如果有的话)进行每个片断的颜色计算,最后将处理
9、后的数据送光栅操作模块。Vertex Shader ProgramFragment Shader Programn片断就是所有的三维顶点在光栅化之后的数据集合,这些数据还没有经过深度值比较n片断着色程序对每个片断进行独立的颜色计算,最后输出颜色值的就是该片段最终显示的颜色。可以这样说,顶点着色程序主要进行几何方面的运算,而片段着色程序主要针对最终的颜色值进行计算。CG、GLSL、HLSLnShader language 目前有3 种主流语言:基于OpenGL 的GLSL(OpenGLShading Language,也称为GLslang)基于Direct3D 的HLSL(High Level ShadingLanguage)语言,NVIDIA 公司的Cg(C for Graphic)语言。