GPU工作原理简介

绝世美人儿
790次浏览
2021年02月22日 23:14
最佳经验
本文由作者推荐

-花蒜

2021年2月22日发(作者:最爱你的人是我原唱)



GPU


工作原理简介




计算机


0601


沈凯杰




【引言】




GPU


出现以前,显卡和


CPU


的关系 有点像“主仆”


,简单地说这时的显卡就是画笔,根据各种有


C PU


发出


的指令和数据进行着色,材质的填充、渲染、输出等。



较早的娱乐用的


3D


显卡又称“


3D


加速卡”


,由 于大部分坐标处理的工作及光影特效需要由


CPU


亲自处理,< /p>


占用了


CPU


太多的运算时间,从而造成 整体画面不能非常流畅地表现出来。



例如,渲染一个复杂的三 维场景,需要在一秒内处理几千万个三角形顶点和光栅化几十亿的像素。早期的


3D


游戏,显卡只是为屏幕上显示像素提供一个缓存,所有的图形处理都是由

CPU


单独完成。图形渲染适合


并行处理,擅长于执行串行 工作的


CPU


实际上难以胜任这项任务。所以,那时在


PC


上实时生成的三维图像


都很粗糙。不过在某 种意义上,当时的图形绘制倒是完全可编程的,只是由


CPU


来 担纲此项重任,速度上


实在是达不到要求。


< br>随着时间的推移,


CPU


进行各种光影运算的速度变得越 来越无法满足游戏开发商的要求,更多多边形以及


特效的应用榨干了几乎所有的


CPU


性能,矛盾产生了·


·

< br>·


·


·


·




【目录】


第一章.


GPU


的诞生



3.1 GPU


中数据的处理流程



3.2 CPU



GPU


的数据处理关系



3.3


传统


GPU


指令的执行



3.4 GPU


的多线程及并行计算



3.4.1


多线程机制



3.4.2


并行计算



第二章.


GPU


的结构


< /p>


第三章.


GPU


的工作原理



第四章.


GPU


未来的展 望



4.1 GPU


能否包办一切



4.2 GPU


时代即将到来




【正文】



第一章.

< br>GPU


的诞生



NVIDIA< /p>


公司在


1999



8



31


日发布

GeForce 256


图形处理芯片时首先提出


GPU< /p>


的概念。



GPU


之所以被称为图形处理器,最主要的原因是因为它可以进行几乎全部与计算机图形有关的数据运


算,而这些在过去是


CPU


的专利。

< br>


目前,计算机图形学正处于前所未有的发展时期。近年来,

GPU


技术以令人惊异的速度在发展。渲染


速率每


6


个月就翻一番。性能自


99

< br>年,


5


年来翻番了


10


次,也就是(


2



10


次方比


2


)提高了上千倍!

< p>
与此同时,不仅性能得到了提高,计算质量和图形编程的灵活性也逐渐得以改善。

< br>


以前,


PC


和计算机工作站只 有图形加速器,没有图形处理器(


GPU


),而图形加速器只能 简单的加速


图形渲染。而


GPU


取代了 图形加速器之后,我们就应该摒弃图形加速器的旧观念。




第二章.


GPU


的结构






GPU


全称是


GraphicProcessing Unit


--图形处理器,其最大的作用就是进行各种绘制计算机图形所


需的运算,包括顶点设置、光影、像素操作等。


GPU


实际上是一组图形函数的集合,而这些函数有硬件实


现,只要用于


3D


游戏中物体移动时的坐标转换及光源处理。以前,这些工作都是有


CPU


配合特定软件进行


的,


GPU


从某种意义上讲就是为了在图形处理过程中充当主角而出现的。

< br>


下图就是一个简单的


GPU


结 构示意图,一块标准的


GPU


主要包括


2D Engine



3D Engine



Video


Processing


Engine



FSAA

< p>
Engine


、显存管理单元等。其中,


3D


运算中起决定作用的是


3DEngine


, 这是现



3D


显卡的灵魂,也是区别< /p>


GPU


等级的重要标志。


3DEngln e


在各公司的产品中都是宣传攻势的重点照顾


对象,名字一个比 一个响,像


NVIDIA



nFjnj tFX


系列、


CineFX


系列,


ATI



SmoothVision


系列。一个


3DEngine


通常包含着


T&L


单元、


VertexProeess ingEngine



SetupEngine



PiexlShader


等部分。

< br>




第三章.

< p>
GPU


的工作原理



3.1 GPU


中数据的处理流程


< /p>


现在让我们来看看第二代


GPU


是如何完 整处理一个画面的吧!


首先,


来自


CP U


的各种物理参数进入


GPU



Vertex shader


将对顶点数据进行基本的判断。如果没有 需要处理的


Vertex


效果,则顶点数据直接进入


T&L Unit


进行传统的


T&L


操作以节约时间提高效率。如果需要 处理各种


Vertex


效果,则


Vertex shader


将先对各种


Vertex Programs


的指令进行运算,一般的


Vertex Pr ograms


中往往包含了过去转换、剪切、


光照运算等所需要 实现的效果,故经由


Vertex shader


处理的效果一 般不需要再进行


T&L


操作。另外,当


遇到涉及到曲面镶嵌


(


把曲面,比如弓形转换成为多边形或三角 形


)


的场合时。


CPU


可以直接将数据交给


Vertex shader


进行处理。



另外,在< /p>


DireetX8.0



Transfo rm


过程中,


Vertex shader

可以完成


Z


值的剔除,也就是


Ba ck Face


Culling


――阴面隐去。这就意味粉除 了视野以外的顶点,视野内坡前面项点遮住的顶点也会被一并剪除,


这大大减轻了需要进 行操作的顶点数目。



接下来,经由


V ertexShader


处理完成的各种数据将流入


Setup Engine


,在这里,运算单元将进行三角形的


设置工作,这 是整个绘图过程中最重要的一个步骤,


Setup Engine


甚至直接影响着一块


GPU


的执行效能。

三角形的设置过程是由一个个多边形组成的,或者是用更好的三角形代替原来的三角形。在三维图象中可


能会有些三角形被它前面的三角形挡住,


但是在这个阶段

< p>
3D


芯片还不知道哪些三角形会被挡住,


所以三角


形建立单元接收到是一个个由


3


个顶点 组成的完整三角形。三角形的每个角


(


或顶点

< br>)


都有对应的


X


轴、

< p>
Y


轴、


Z


轴坐标值,这些 坐标值确定了它们在


3D


景物中的位置。同时,三角形的设置也 确定了像素填充的范




围。,至此,


VertexShader


的工作就完成了。

< br>


过去


[


第一代


]



设置好的三角形本来应该带着各自所有的参数进入 像素流水线内进行纹理填充和演染,


但现在则不同,在填充之前我们还播要进行


PiexlShader


的操作。其实,


Pie XIShader


并非独立存在的,


它位于纹理填


充单元之后


,数据流


入像紊流水

线后先进入


纹理填充


单元进行纹


理 填充,


然后便是


Piex!Shader


单元,经由


PiexlShader


单元进行各种处理运算之 后再进入像素填充单元进行具体的粉色,


再经由雾化等操作后,一个完整的画面就算完成 了。值得注意的是,第二代


GPU


中普遮引入了独立的显示


数据管理机制,它们位于


VertexShader



SetuPEngine


以及像素流水线之间,负资 数据更有效率地传输和


组合、各种无效值的剔除、数据的压缩以及寄存器的管理等工作, 这个单元的出现对整个


GPU


工作效率的


保证起到了至关重要的作用。




简 而言之,


GPU


的图形(处理)流水线完成如下的工作:(并不 一定是按照如下顺序)



顶点处理:


这阶段


GPU


读取描述


3D

< p>
图形外观的顶点数据并根据顶点数据确定


3D


图形 的形状及位置关


系,建立起


3D


图形的 骨架。在支持


DX8



DX9


规格的


GPU


中,这些工作由硬件实现的


Vertex Shader


(定


点着色器)完成。



光栅化计算:


显示器实际显示的图像是由像素组成的,我们需要 将上面生成的图形上的点和线通过一


定的算法转换到相应的像素点。

把一个矢量图形转换为一系列像素点的过程就称为光栅化


。例如,一条数

< p>
学表示的斜线段,最终被转化成阶梯状的连续像素点。



纹理帖图:顶点单元生成的多边形只构成了


3D


物体的 轮廓,而纹理映射(


texture mapping


)工作完 成对


多变形表面的帖图,通俗的说,


就是将多边形的表面贴上相 应的图片,从而生成


“真实”的图形。


TMU

< br>(


Texture mapping unit


)即是用来完成此项工作。



像素处理:


这阶段(在对每个像素进行光栅化处理期间)


GP U


完成对像素的计算和处理,从而确定每


个像素的最终属性。在 支持


DX8



DX9

< br>规格的


GPU


中,这些工作由硬件实现的


Pixel


Shader


(像素着色器)

< p>
完成。



最终输出:由


ROP


(光栅化引擎)最终完成像素的输出,


1


帧渲染完毕后,被送到显存帧缓冲区。




总结:


GPU


的工作通俗的来说就是完成


3D


图形的生成,将图形映射到相应的像素点上,对每个像素进


行计算确定最终颜色并完成输出。






-――


G PU


流程示意图



3.2 CPU



GPU


的数据处理关系

< br>


如今的游戏,单单从图象的生成来说大概需要下面四个步骤:



1



Homogeneous coordinates


(齐次坐标)



2



Shading models


(阴影建模)



3



Z-Buffering



Z-


缓冲)



4



Texture- Mapping


(材质贴图)



在这 些步骤中,显示部分(


GPU


)只负责完成第三、四步,而前两 个步骤主要是依靠


CPU


来完成。而


且,这还仅仅只是


3D


图象的生成,还没有包括游戏中复杂的


AI


运算。场景切换运算等等„„无疑,这些

< br>元素还需要


CPU


去完成,这就是为什么在运行《魔兽世 界》的时候,当场景切换时再强劲的显卡都会出现


停顿的现象。



接下来,让我们简单的看一下


CPU



GPU


之间的数据是如何交互的。



首先从硬盘中读取模型,


CPU


分类 后将多边形信息交给


GPU



GPU< /p>


再时时处理成屏幕上可见的多边形,


但是没有纹理只有线框。



模型出来后,


GPU

< br>将模型数据放进显存,显卡同时也为模型贴材质,给模型上颜色。


CPU


相应从显存中


获取多边形的信息。然后


CPU< /p>


计算光照后产生的影子的轮廓。等


CPU


计算出后,显卡的工作又有了,那就


是为影子中填充深的颜色



这一点要注意的是,无论多牛的游戏家用显卡,光影都是


CPU


计算的,


GPU


只有

< br>2


个工作,


1


多边形生


成。


2


为多边形上颜色。




3.3


传统


GPU


指令的执行



传统的< /p>


GPU


基于


SIMD

的架构。


SIMD



Single Instruction Multiple Data


,单指令多数据。



其实这 很好理解,传统的


VS



PS


中的


ALU


(算术逻辑单元,通常每个


VS



PS


中都会有一 个


ALU


,但这不是一


定的,例如


G70



R5XX


有两个)都能够在一个周期内(即同时)完成对矢量


4


个通道的 运算。比如执行一条


4D


指令,


PS< /p>



VS


中的


AL U


对指令对应定点和像素的


4


个属性数 据都进行了相应的计算。这便是


SIMD


的由来。


这种


ALU


我们暂且称它为


4D ALU




需要注意的是,


4D SIMD


架构虽 然很适合处理


4D


指令,但遇到


1D< /p>


指令的时候效率便会降为原来的


1/4


。 此时


-花蒜


-花蒜


-花蒜


-花蒜


-花蒜


-花蒜


-花蒜


-花蒜