返回首页
当前位置: 主页 > 精通Office > 其他教程 >

知道CPU 但GPU又是什么

时间:2017-10-07 22:23来源:知行网www.zhixing123.cn 编辑:麦田守望者

GPU,是Graphics ProcessingUnit的简写,是现代显卡中非常重要的一个部分,其地位与CPU在主板上的地位一致,主要负责的任务是加速图形处理速度。

GPU是显示卡的“大脑”,它决定了该显卡的档次和大部分性能,同时也是2D显示卡和3D显示卡的区别依据。2D显示芯片在处理3D图像和特效时主要依赖CPU的处理能力,称为“软加速”。3D显示芯片是将三维图像和特效处理功能集中在显示芯片内,也即所谓的“硬件加速”功能。

图0:都知道CPU 但GPU又是什么鬼?

 

 

今天,GPU已经不再局限于3D图形处理了,GPU通用计算技术发展已经引起业界不少的关注,事实也证明在浮点运算、并行计算等部分计算方面,GPU可以提供数十倍乃至于上百倍于CPU的性能,如此强悍的性能已经让CPU厂商老大英特尔为未来而紧张。

GPU的诞生与发展

NVIDIA公司在1999年8月31日发布GeForce 256图形处理芯片时首先提出GPU的概念。GPU之所以被称为图形处理器,最主要的原因是因为它可以进行几乎全部与计算机图形有关的数据运算,而这些在过去是CPU的专利。

图1:都知道CPU 但GPU又是什么鬼?

 

 

从GPU诞生那天开始,其发展脚步就没有停止下来,由于其独特的体系架构和超强的浮点运算能力,人们希望将某些通用计算问题移植到GPU上来完成以提升效率,出现了所谓的GPGPU(General Purpose Graphic Process Unit),但是由于其开发难度较大,没有被广泛接受。

2006年NVIDIA推出了第一款基于Tesla架构的GPU(G80),GPU已经不仅仅局限于图形渲染,开始正式向通用计算领域迈进。

2007年6月,NVIDIA推出了CUDA(ComputerUnified Device Architecture计算统一设备结构)。

CUDA是一种将GPU作为数据并行计算设备的软硬件体系。在CUDA 的架构中,不再像过去GPGPU架构那样将通用计算映射到图形API中,对于开发者来说,CUDA 的开发门槛大大降低了。

CUDA 的编程语言基于标准C,因此任何有C 语言基础的用户都很容易地开发CUDA 的应用程序。由于这些特性,CUDA在推出后迅速发展,被广泛应用于石油勘测、天文计算、流体力学模拟、分子动力学仿真、生物计算、图像处理、音视频编解码等领域。

GPU的结构

GPU实际上是一组图形函数的集合,而这些函数有硬件实现,只要用于3D游戏中物体移动时的坐标转换及光源处理。以前,这些工作都是有CPU配合特定软件进行的,GPU从某种意义上讲就是为了在图形处理过程中充当主角而出现的。

图2:都知道CPU 但GPU又是什么鬼?

 

 

上图就是一个简单的GPU结构示意图,一块标准的GPU主要包括2D Engine、3D Engine、VideoProcessing Engine、FSAA Engine、显存管理单元等。其中,3D运算中起决定作用的是3DEngine,这是现代3D显卡的灵魂,也是区别GPU等级的重要标志。

GPU的工作原理

GPU中数据的处理流程

我们来看看第二代GPU是如何完整处理一个画面。首先,来自CPU的各种物理参数进入GPU,Vertex shader将对顶点数据进行基本的判断。如果没有需要处理的Vertex 效果,则顶点数据直接进入T&L Unit 进行传统的T&L操作以节约时间提高效率。如果需要处理各种Vertex 效果,则Vertex shader将先对各种Vertex Programs的指令进行运算,一般的Vertex Programs中往往包含了过去转换、剪切、光照运算等所需要实现的效果,故经由Vertexshader处理的效果一般不需要再进行T&L操作。另外,当遇到涉及到曲面镶嵌(把曲面,比如弓形转换成为多边形或三角形)的场合时。CPU可以直接将数据交给Vertex shader进行处理。

另外,在DiretX8.0的Transform过程中,Vertexshader可以完成Z值的剔除,也就是Back Face Culling――阴面隐去。这就意味粉除了视野以外的顶点,视野内坡前面项点遮住的顶点也会被一并剪除,这大大减轻了需要进行操作的顶点数目。

接下来,经由VertexShader处理完成的各种数据将流入SetupEngine,在这里,运算单元将进行三角形的设置工作,这是整个绘图过程中最重要的一个步骤,Setup Engine甚至直接影响着一块GPU的执行效能。三角形的设置过程是由一个个多边形组成的,或者是用更好的三角形代替原来的三角形。在三维图象中可能会有些三角形被它前面的三角形挡住,但是在这个阶段3D芯片还不知道哪些三角形会被挡住,所以三角形建立单元接收到是一个个由3个顶点组成的完整三角形。三角形的每个角(或顶点)都有对应的X轴、Y轴、Z轴坐标值,这些坐标值确定了它们在3D景物中的位置。同时,三角形的设置也确定了像素填充的范围。,至此,VertexShader的工作就完成了。

在第一代GPU中,设置好的三角形本来应该带着各自所有的参数进入像素流水线内进行纹理填充和演染,但现在则不同,在填充之前我们还播要进行PiexlShader的操作。其实,PieXIShader并非独立存在的,它位于纹理填充单元之后,数据流入像紊流水线后先进入纹理填充单元进行纹理填充,然后便是Piex!Shader单元,经由PiexlShader单元进行各种处理运算之后再进入像素填充单元进行具体的粉色,再经由雾化等操作后,一个完整的画面就算完成了。值得注意的是,第二代GPU中普遮引入了独立的显示数据管理机制,它们位于VertexShader、SetuPEngine以及像素流水线之间,负资数据更有效率地传输和组合、各种无效值的剔除、数据的压缩以及寄存器的管理等工作,这个单元的出现对整个GPU工作效率的保证起到了至关重要的作用。

图3:都知道CPU 但GPU又是什么鬼?

 

 

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

顶点处理:这阶段GPU读取描述3D图形外观的顶点数据并根据顶点数据确定3D图形的形状及位置关系,建立起3D图形的骨架。在支持DX8和DX9规格的GPU中,这些工作由硬件实现的Vertex Shader(定点着色器)完成。

光栅化计算:显示器实际显示的图像是由像素组成的,我们需要将上面生成的图形上的点和线通过一定的算法转换到相应的像素点。把一个矢量图形转换为一系列像素点的过程就称为光栅化。例如,一条数学表示的斜线段,最终被转化成阶梯状的连续像素点。

纹理帖图:顶点单元生成的多边形只构成了3D物体的轮廓,而纹理映射(texture mapping)工作完成对多变形表面的帖图,通俗的说,就是将多边形的表面贴上相应的图片,从而生成“真实”的图形。TMU(Texture mapping unit)即是用来完成此项工作。

像素处理:这阶段(在对每个像素进行光栅化处理期间)GPU完成对像素的计算和处理,从而确定每个像素的最终属性。在支持DX8和DX9规格的GPU中,这些工作由硬件实现的PixelShader(像素着色器)完成。

最终输出:由ROP(光栅化引擎)最终完成像素的输出,1帧渲染完毕后,被送到显存帧缓冲区。

图4:都知道CPU 但GPU又是什么鬼?

 

 

CPU与GPU的数据处理关系

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

1、Homogeneouscoordinates(齐次坐标)

2、Shading models(阴影建模)

3、Z-Buffering(Z-缓冲)

4、Texture-Mapping(材质贴图)

在这些步骤中,显示部分(GPU)只负责完成第三、四步,而前两个步骤主要是依靠CPU 来完成。而且,这还仅仅只是3D图象的生成,还没有包括游戏中复杂的AI运算。场景切换运算等等……无疑,这些元素还需要CPU去完成,这就是为什么在运行大型游戏的时候,当场景切换时再强劲的显卡都会出现停顿的现象。

接下来,让我们简单的看一下CPU和GPU之间的数据是如何交互的。

首先从硬盘中读取模型,CPU分类后将多边形信息交给GPU,GPU再时时处理成屏幕上可见的多边形,但是没有纹理只有线框。

模型出来后,GPU将模型数据放进显存,显卡同时也为模型贴材质,给模型上颜色。CPU相应从显存中获取多边形的信息。然后CPU计算光照后产生的影子的轮廓。等CPU计算出后,显卡的工作又有了,那就是为影子中填充深的颜色

这一点要注意的是,无论多牛的游戏家用显卡,光影都是CPU计算的,GPU只有2个工作,1多边形生成。2为多边形上颜色。

传统GPU指令的执行

传统的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的资源都被闲置。为了提高PSVS执行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

顶一下
(1)
100%
踩一下
(0)
0%
标签(Tag):GPU CPU
------分隔线----------------------------
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片
猜你感兴趣