GPUs: A Closer Look (深入观察GPU架构)
gpu吧
全部回复
仅看楼主
level 5
去看看BDCZ 楼主
转载自OpenGPU Blog
2013年03月04日 12点03分 1
level 5
去看看BDCZ 楼主
VP(Vertex Processing,顶点处理)VP是可编程的,即应用程序可以指定让VP做什么处理(可以把 VP当作vertex shader)。VP的输入和输出是一一对应的,即一个顶点被VP处理后仍然是一个顶点(VP不会增加或者减少顶点,注意与Geometry Shader的区别)。各顶点间的处理是相互独立的。VP最重要的功能是计算把三维顶点映射到二维屏幕上的投影矩阵。
PP(Primitive Processing,几何处理)同VP类似,PP也是可编程的(可以把PP当作 Geometry Shader)。PP的输入和输出不再是一一对应的。一个图元被PP处理后可以生成0个或者多个图元,即PP可以增加或者减少几何图元。因此PP的输出是一系列新的几何图元。PP对各图元处理也是相互独立的。
FG(Fragment Generation,片元生成)FG对每一个几何图元在屏幕空间中(Screen Space)进行采样(这一过程被称之为光栅化)。每一个采样点显然就是一个片元。片元记录了该采样点在屏幕空间中的位置,与视点之间的距离以及通过插值获得的顶点属性。
FP(Fragment Processin**元处理)FP模拟了光线和物体表面的交互作用,以此决定每个片元的颜色以及透明程度等属性。为了获得更加真实的效果,FP还大量使用了纹理滤波。FP也是可编程单元(可以把FP当作pixel shader)。
PO(Pixel Operations)PO用每个片元的屏幕坐标信息来计算该片元对最终生成图像上的像素的影响程度。PO计算每个采样点离视点的距离,并丢弃哪些被遮挡住的片元。当来自多个几何图元的片元影响同一个像素时(最常见的情况是半透明物体的相互遮挡),很多绘制技术都依赖于PO来根据几何图元的位置按序的更新像素。所有的图形API都要确保PO的正确,同时PO阶段也是唯一由流水线本身来决定以何种顺序处理片元的阶段。
Shader编程 (Shader Programming)
对于图形流水线中的可编程单元(VP,PP,FP),它们的行为是由应用程序定义的,即编写相应的shader函数(shader functions)。图形程序能够用高级绘制语言(例如nvidia的Cg,OpenGL的GLSL,微软的HLSL)来编写vertex shader,geometry shader,pixel shader。Shader程序被离线编译为字节码(byte code),然后在运行时由驱动程序将其转化为依赖于GPU(GPU-Specific)的二进制程序。
绘制语言支持复杂的数据类型和丰富的控制流指令,但是绘制语言并没有显示并行的特性。因此,一个shader程序类似于C语言中的函数,它顺序的计算每个输入流的输出。每一个输入流对应同样的shader程序(例如不能让一些像素执行一个pixel shader,另外一些像素执行另外的pixel shader),shader程序在各个输入流上的执行是相互无关的。
为了方便,除了输入流和输出流外,shader程序可以读取(但是不能修改)一些大的,全局共享的缓存(buffers)。在流水线启动前,这些缓存就被初始化,包含了一些跟shader相关的参数以及应用程序提供的纹理。
特征和挑战(Characteristics and Challenges)
图形流水线具有以下一些关键特征:
并行处理(Opportunities for parallel processing)。图形渲染具有任务并行(比如在图形流水线中,shader单元在执行shader程序,同时Z单元在通过Z值来剔除被遮挡的图元,这两个任务是并行执行的)和数据并行(比如 shader单元的SIMD)的特征,这使得可以通过并行处理来提升吞吐率。尽管图形处理具有高度并行性,但是PO阶段的处理要求数据有序。这一限制使得图形流水线的设计复杂化。例如在PO阶段中,对大部分的片元是可以并行处理的,但那些对应同一个像素的片元是不能并行处理的。
固定功能单元负责处理难于并行化的工作(Fixed-function stages encapsulatedifficult-to-parallize work)。虽然每一个shader程序的执行是按序的(即 shader程序里的每一条指令是应当按序执行的),但是同一个shader程序可以并行的执行在不同的输入数据流上(想象pixel shader程序被同时执行在不同的像素上),这体现了可编程单元最简单的并行性。与之相反,图形流水线中的非可编程单元负责解决那些难于并行的任务,例如PO阶段对于有序的要求以及PG阶段对顶点的重组)。把这些非数据并行任务(non-data-parall)同可并行任务隔离开,并交给固定功能单元处理,使得shader的编程模型得以简化,同时也使得GPU的的可编程单元变得高度专用化(highly specilaized),即非常适合处理数据级并行的任务。另外,这种分离设计使得图形计算中那些难于处理的任务被封装到了高度优化的固定功能单元中。
I
2013年03月04日 13点03分 3
level 5
去看看BDCZ 楼主
2013年03月04日 13点03分 5
level 12
看完第一遍确实老火,,Mark一下,慢慢研究
2013年03月04日 14点03分 6
level 5
马克
2013年03月04日 14点03分 7
level 10
支持啦啦
2013年03月04日 16点03分 8
level 13
[Yeah]
2013年03月05日 01点03分 9
level 11
好贴
2013年06月27日 12点06分 11
level 12
太长不看 支持顶
2013年06月27日 12点06分 12
如果是用手机上贴吧一定会看完。但在电脑上没有伊毅力看完
2013年06月27日 12点06分
level 9
mark
2013年06月27日 13点06分 13
level 9
真大神的文章!
2013年06月27日 13点06分 14
level 11
好看
2014年12月08日 10点12分 15
level 10
太长不看
2014年12月10日 08点12分 16
level 15
太长不看。。。。。[阴险]
2014年12月12日 08点12分 17
1