导航:首页 > 源码编译 > gpu信息如何传给算法

gpu信息如何传给算法

发布时间:2022-05-26 05:30:19

Ⅰ 对GPU与CPU传输过程的疑问

第一:带宽可以说是个传输量,而不是传输带,所以显存到北桥Pci-e可以说直接到达的。第二:不经过内存,内存可以说是CPU到硬盘的仓库,显卡没有太大关系。第三:无论是SNB还是推土机,IVB还是打桩机,最大的特点就是在CPU核心“融合”了GPU,一般叫核心显卡,这就说明GPU和CPU是一块的,但是又是分开的,同理推土机CPU基本融合了一块HD6450(没记错的话)级别的显卡,“显存频率” “总线带宽”都是已经设定好了,那就不是内存带宽越大,核显性能越好了。(其他问题第四点回答)第四:前面说过了,既然Pci-e显卡不影响内存传输(应该反过来说),所以显卡带宽是显卡带宽,内存带宽是内存带宽,这个计算机原理大致就是 数据-内存(RAM)-北桥(H55取消了北桥)-CPU ,这个就很显卡无关,之后就是 CPU-北桥-GPU(同时也返回内存)-显示器。至于集显(集成在北桥芯片)和核显的显存就是调用内存的,其他和上面的原理相同。至于这个带宽前面说了,显卡带宽很内存带宽是没有关系的,所以就不会出现前面说的,内存带宽越大显卡性能越强的事,越不会出现内存带宽还带动显卡带宽的问题。第五:你误解了一个问题,就是前端总线(FSB)。前端总线是CPU外频和主板的连接速度,即影响内存和CPU连接速度,如果一个CPU的FSB(前端总线)和主板的FSB为1066Mhz,那你可以插条DDR2 1066MHz(内存频率)的内存,如果你的CPU的FSB和主板的FSB为553MHz,你插条DDR2 1066MHz的内存,那你的实际内存频率就为553MHz(插上去是没有问题的,可以正常使用,就是1066MHz降为553MHz了)所以就算FSB为133,内存带宽为20GB/s(当然这个比例不恰当,高手一下就看出漏洞)也是没有什么影响的。当然I3的FSB就没有1333MHz,只有667MHz,至于为什么请网络,至于内存带宽的算法,你算错了,那是内存频率的。内存带宽的算法是 时钟频率Xdit/8=带宽 不过现在都是DDR的内存那就是 时钟频率X 带位/8*2=带宽 举例 一条DDR3 1333MHz 的带宽就是 : (1333/2)x 64/8*2=10664MHz 转换 10664MHz=10.664GB/s大致就这样了,重要的已经加粗了,我自己也不是电脑高手,但是一点简单的问题还是可以帮你回答的

Ⅱ ◆请问 gpu处理的数据先传给cpu还是显存还是同时传给显存和cpu呢

说简单点,把显卡比做两个桶,里面装满水,1个容量512升,1个容量是1024升
位宽就相当于桶的开口,容量相当于显卡的显存,512升的开口有256cm 另一个1024的只有128cm,把他们到出来放水,那肯定开口大的流的速度快啊,显卡位宽就是这样一个很重要的指标。

cpu那叫频率吧

显存位宽是显存在一个时钟周期内所能传送数据的位数,位数越大则瞬间所能传输的数据量越大,这是显存的重要参数之一。目前市场上的显存位宽有64位、128位和256位三种,人们习惯上叫的64位显卡、128位显卡和256位显卡就是指其相应的显存位宽。显存位宽越高,性能越好价格也就越高,因此256位宽的显存更多应用于高端显卡,而主流显卡基本都采用128位显存。
一般出现在同品牌上的显存位宽上,例如同为一款ATI RADEON9200但是在显存位宽上有所不同,有些为128bit、有些为64bit,而销售人员就经常把64bit当作128bit来卖,外观上几乎没有区别,有区别的就是在显存的个数上,而普通的消费者往往不能正确的辨识。在这里小编可以给大家介绍一种最基本的方法来比对,如果显卡上显存颗粒数为8颗,那么该显卡的位宽基本为128bit,如果显卡上显存颗粒数为4颗,则为64bit。以上方法只用于TSOP-II显存的辨认,而采用mBGA封装形式的显存通常都为128bit因为mBGA封装形式决定了他单颗颗粒位宽为32bit。

Ⅲ 如何通过OpenGL编程将GPU用于通用计算任务

随着现代图形处理器(GPU)可编程能力及性能的提高,应用开发商们一直希望图形硬件可以解决以前只有通用CPU才能完成的高密集计算任务。尽管利用通用GPU进行计算很有发展前景,但传统图像应用编程接口仍然将GPU抽象成一个包括纹理、三角形和像素在内的图像绘制器。寻找一种能够使用这些基本元素的映射算法并不是一项简单的操作,即便对最先进的图形开发商而言也是如此。

幸运的是,基于GPU的计算从概念上讲很容易理解,并且现有多种高级语言和软件工具可以简化GPU的编程工作。但是,开发商必须首先了解GPU在图像绘制过程中是如何工作的,然后才能确定可用于计算的各个组件。

在绘制图像时,GPU首先接收宿主系统以三角顶点形式发送的几何数据。这些顶点数据由一个可编程的顶点处理器进行处理,该处理器可以完成几何变换、亮度计算等任何三角形计算。接下来,这些三角形由一个固定功能的光栅器转换成显示在屏幕上的单独“碎片(fragment)”。在屏幕显示之前,每个碎片都通过一个可编程的碎片处理器计算最终颜色值。

Ⅳ 用Gpu做算法要大显存吗

GPU是显示卡的一部分,而不是深度学习算法的一部分,叫做图形处理器。
显示卡的基本作用是控制电脑的图形输出,安装在电脑主板的扩展槽中,或者集成在主板上,工作在中央处理器和显示器之间。
显示卡主要包括图像处理器、显存、数模转换器、AGP总线接口等几个部分,数据流从中央处理器流出后,要把中央处理器传来的数据送到图像处理器中进行处理,把芯片处理完的数据送入显存,把显存读取出数据送到数模转换器进行数据转换的工作,从数模转换器进入显示器。ß显存是显示卡的核心部件,存放显示芯片处理后的数据,显存越大,显示卡支持的最大分辨率越大。显存的容量至少是逗水平分辨率*垂直分辨率*log2颜色数/8地。
希望我能帮助你解疑释惑。

Ⅳ 如何用opencv的GPU模块实现算法

OpenCV的一些函数,如SURF,OpticalFlow,houghlines,提供了GPU加速版本,但是使用起来挺麻烦的,而且貌似效果没有宣传的那么好,你的这个程序应该是无GPU的。

Ⅵ 显卡数据传输流程(请看好补充)

1、 CPU → 显卡

CPU将有关作图的指令和数据通过总线传送给显卡。对于现代显卡,由于需要传送大量的图像数据,因而显卡接口在不断改进,从最早的ISA接口到PCI、流行的AGP接口,以及正在普及的PCI-E接口,其数据吞吐能力不断增强。

2、 显卡内部图像处理

GPU根据CPU的要求,完成图像处理过程,并将最终图像数据保存在显存中。

3、 最终图像输出

对于普通显卡 ,RAMDAC从显存中读取图像数据,转换成模拟信号传送给显示器。
对于具有数字输出接口的显卡,则直接将数据传递给数字显示器。

GPU的角色
GPU是显卡的核心部件,它负责大量的图像数据运算和内部的控制工作。

GPU是否强大,直接影响到显卡图像加速的性能。它所负责的图像运算有:

2D图像加速:{{{1}}}(欢迎补充资料)
3D图像加速:GPU根据3D数据生成多边形,并进行贴图/渲染/光照/雾化等计算,以及Z-Buffer遮挡计算。在先进的GPU中,有多条流水线进行3D处理,因而具有强劲的性能。
GPU的加速功能可以通过支持程序打开(例如Windows的DirectX),从而分担CPU的计算工作,提高整台电脑的性能。若图形加速功能未打开,则电脑CPU必须承担所有图像生成所需的计算。

GPU的控制程序存放在显卡BIOS中,着名显卡厂商都提供显卡BIOS数据和升级程序。通过刷新显卡BIOS,可以使显卡具有更强的处理能力并消除旧版的缺陷。

显存的作用
显存是显卡系统的专用内存,它里面存放图像处理所用的中间数据和最终数据。

经过GPU处理后,图像最终以点阵形式存放在显存中。对于不同的显示分辨率和色彩深度,显卡中的最终显示数据组织格式不同,参见???。

不同显示模式所需的显存大小:

显示分辨率 色彩深度 显存大小(字节)
640*480 8bit 300K
640*480 24bit 1.2M
1024*768 24bit 2.034M

为了加快显示过程,显存还具有多页结构,允许显示其中一个页面时对另外的页面进行后台更新,更新完毕后再切换到前台显示。

由上表可以看到,最终图像数据对于现代显卡的显存(32M、64M甚至更多)仅占很小的一部分。那么多余的显存用来做什么呢?

其余的显存用于图像中间数据存放,包括:2D窗口移动、遮挡数据,3D图形的多边形数据、贴图材质数据等,以及GPU计算的中间结果等。

Ⅶ GPU是什么

图形处理器(英语:Graphics Processing Unit,缩写:GPU),又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上图像运算工作的微处理器。
用途是将计算机系统所需要的显示信息进行转换驱动,并向显示器提供行扫描信号,控制显示器的正确显示,是连接显示器和个人电脑主板的重要元件,也是“人机对话”的重要设备之一。显卡作为电脑主机里的一个重要组成部分,承担输出显示图形的任务,对于从事专业图形设计的人来说显卡非常重要。
中文名
图形处理器
外文名
Graphics Processing Unit
英语缩写
GPU
又称
显示核心、视觉处理器、显示芯片

Ⅷ GPU和CPU之间是如何协调数据处理的

因为设计的目标不同,当今的CPU和GPU功能上有本质的不同。作为通用处理器的CPU,顾名思义,它是设计用来处理通用任务的处理、加工、运算以及系统核心控制等等的。CPU中包含的最基本部件有算术逻辑单元和控制单元,CPU的微架构是为高效率处理数据相关性不大的计算类、复杂繁琐的非计算类的等等百花八门的工作而优化的,在处理日常繁复的任务中应付自如。

计算机的“灵魂”——操作系统,以及几乎100%的系统软件都主要仰仗CPU来顺利运行。CPU面对的算术、逻辑运算以及控制处理是非常繁琐和复杂的,面对处理的数据和信息量不仅数量多而是种类多。CPU运算和控制多面手的这种设计,让它在计算机中得心应手,位置不可动摇。

GPU设计的宗旨是实现图形加速,现在最主要的是实现3D 图形加速,因此它的设计基本上是为3D图形加速的相关运算来优化的,如z-buffering 消隐,纹理映射(texture mapping),图形的坐标位置变换与光照计算(transforming & lighting)等等。这类计算的对象都是针对大量平行数据的,运算的数据量大,但是运算的类型却并不复杂,大多类似和雷同,计算性强但是逻辑性不强,如矩阵运算就是图形运算的典型特性。

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

1、Homogeneous coordinates(齐次坐标)
2、Shading models(阴影建模)
3、Z-Buffering(Z-缓冲)
4、Texture-Mapping(材质贴图)
在这些步骤中,显示部分(GPU)只负责完成第三、四步,而前两个步骤主要是依靠 CPU 来完成。而且,这还仅仅只是3D图象的生成,还没有包括游戏中复杂的AI运算。场景切换运算等等……无疑,这些元素还需要CPU去完成,这就是为什么在运行《魔兽世界》的时候,当场景切换时再强劲的显卡都会出现停顿的现象。
对于需要CPU进行大量AI运算的游戏来说,在固定的显示分辨率下,CPU的架构越强、主频越高的确有一定的优势。着名的FPS第一人称设计游戏——CSS,就是一个很好的例子。当你开启了30个左右的机器人,在大混战的时候就很容易体现出高端CPU与入门级CPU之间的区别了。
打造一套完整的游戏 PC 系统,CPU和显卡的搭配应该相得益彰,高成低就或低成高就都是不平衡的组合方式。

第一代 GPU 首先,CPU将数据传递给GPU进行处理,数据先进入T&L单元中的Transform Engine,在这里,数据将以顶 点的形式接受视野范围的判断,当处理单元判断某部分顶点处于观察者的视线范围以外时,Transform Engine将把这部分顶点“剪除”以使其不会 干扰后续的流水线操作, 具个简单的例子:当你在某FPS游戏中突然打开狙击枪的狙击镜,视野变成了一个圆形的空洞,而其他部分则为黑色,这时 Transform Engine将去除这个圆形视野范围以外的所有顶点,不过,这里进行的只是视野范围的判断,Transform Engine去除在 你的视线范围内但是被其它东西挡住了的物体,另外,每一个三角形可能被旋转,放大/缩小,上升,下降,左偏,右移等。 这就是多边形转换转换。 Transform Engine根据你的视角,改变了由程序提供的组成3D物体的顶点的坐标。经过Lighting Engine处理后的图象经过判断 处理后的数据将流入T&L单元中的Lighting Engine,根据光源的类型,距离,角度,数目,应用方式等不同参数,每一个多边形都会有 不同的光影表现和光影关系,因而需要不同的光线函数予以表征,在Lighting Engine中,处理单元将根据软件提出的光源分布情况为每个顶点计算 出它所具有的光线矢量,以便后续进行的光线纹理贴图,着色等操作
经过Lighting Engine处理的画面
其实,经由T&L单元处理过的数据还只是抽象的数据,并不是具体的图形,上面两副图仅仅是方便读者进行想象的示意图。
接下来数据将流入Setup Engine,在这里,运算单元将进行三角形的设置工作,这是整个绘图过程中最重要的一个步骤,Setup Engine甚 至直接影响着一块GPU的执行效能。三角形的设置过程是由一个一个的多边形组成的,或者是用更好的三角形代替原来的三角形。在三维图像中可能会有些三角形 被它前面的三角形挡住,但是在这个阶段3D芯片还不知道哪些三角形会被挡住。所以三角形建立单元接收到的是一个个由三个顶点组成的完整三角形。三角形的每 个角(或顶点)都有对应的X轴、Y轴和Z轴坐标值,这些坐标值确定了它们在3D景物中的位置。同时,三角形的设置也确定了像素填充的范围
经过Setup Engine处理的画面
最终着色完毕的画面
在三角形设置完毕后,T&L单元的全部运算就完成了。接下来数据将进入NV15独有的NSR像素处理单元进行一定的像素处理,接着流入像素流水线 进行后续的纹理像素填充等操作,这部分操作在DriectX7.0中的变化并不明显,基本的渲染填充过程与过去的显卡几无二异
T&L虽然再一定程度上缓解了CPU运算能力的不济所带来的瓶颈,使得系统在图形方面的资源得到了再分配和增强,但同时,T&L也将新的矛盾转到了GPU上
T&L是一组相对固定的简单的图形函数,所实现的特效受到了函数本身语句的限制,虽然这种固定的指令集设计可以带来比较高的执行效率,但这种设置 使得DX7下所能实现的特效受到了指令集的约束,许多逼真的特效无法实现,程序员的思想也被限定在一个相对狭窄的范围内。
2、我要看到你飘逸的秀发和迷人的微笑—可编程Shader以及第二代GPU
DriectX8.0在传统T&L的基础上加入了两个新的概念—可编程的Vertex Shader和Piexl Shader,同样的,第二代 GPU的标志就是硬件级别的可编程Shader运算,代表产品为NV2X(Geforce3/4Ti),R2XX(Radeon8500)等
可编程Shader的复杂程度远非T&L可比,为了方便大家理解第二代GPU的特点,我们先来认识一下什么是可编程Shader,以及可编程Shader运算单元
可编程Vertex Shader及顶点处理器:
可编程Vertex Shader让程序员能够对特定物体,甚至整个画面的每一个顶点,指定特别的运算程序,却不需要CPU介入。每一个顶点都携带相当多 的信息,比如坐标,重量,法线,颜色,纹理坐标,雾和点大小数据。顶点处理器能够以简短的程序来改变上述这些信息。 这些小程序直接由顶点着色引擎本身执 行,不必劳驾CPU。 典型的T&L引擎将程序员限制在3D运算的光影转换之前, 在有了顶点处理器的支持之后,游戏设计师对游戏场景里的3D物 体能够为所欲为的操纵变化,而且不需要用到中央处理器。
这导致了一场革新,程序可以改变顶点的坐标,这样基本上改变物体的形状,以达到更接近真实的移动、移动残影、混色、内插(在两种外型间转换),以及变形, 比如改变角色脸部的骨骼和皮肤一个产生一个适时的微笑。也可改变顶点上的颜色数据和纹理坐标,物体表面的颜色达到设计师所想要的色彩效果、投影、凹凸贴图 设置(如Blinn Bump mapping)或者其它投射的纹理。光源也可以为程序员随心所欲的调整,不再像过去那样需要对光源的效果进行笨拙的光线 纹理贴图,而这些在以前是不可想象的。这一切都归功于可编程Vertex Shader和顶点处理器的出现
Blinn Bump mapping
可编程Piexl Shader以及像素处理器
在NV15中,nVidia曾经尝试加入一个叫NSR的像素处理单元,它可以在数据进入像素流水线之前对每个像素进行一系列运算操作,虽然同为每像素操 作,但NSR与Piexl Shader可不能同日而语, NSR对于像素的运算只有7种,同T&L一样,它依然是固定模式的,程序员依然要依照 规定好的条条框框写出程序,而Piexl Shader则不同,我们可以用许多不同方式去编程,以实现不同的特效,下面就是一般的像素处理器所具备的特 性:
· 阴影贴图
· 快速纹理载入
· 影像乘法,对称核心
· 支持4096x4096或512x512x512 纹理
· 立方体贴图每边可4096x4096x32-位
· 支持YUYV的纹理(自动转换成RGB三原色)
· 支持全景贴图
可以指向任何一个图像,如背景缓冲区(back buffer),而可直接当作纹理使用
· 边缘色彩及边缘纹理
· 硬件同步化读/写
对同一张纹理的读及写允许全流水线操作。
可以对背景缓冲区着色,然后马上能当作纹理使用
· Pass through colors
· 支持DX6规格的环境凹凸/亮度贴图(就是环境凹凸贴图)
· 简单的纹理,S,T 在alpha/红(AB)及蓝/绿 (BG)
· 等向的双方向性反射分布功能光源
· 内积产生色彩贴图或Z坐标
· 真实反射凹凸贴图
这看起来似乎有点抽象,简单的说,可编程Piexl Shader实现了一个非常重要的特效—真实的毛发
古老街道上昏暗灯光中的狼人
在3D渲染中,渲染真实的毛发一直是一件非常困难的事情,大量的多边形给多边形生成带来了严峻的考验,而每一根毛发之间复杂多变的即时光影关系更不是几个简单固定的指令所能实现的。Piexl Shader的可编程性和运算能力很好的解决了这个问题
好啦,现在让我们来看看第二代GPU是如何完整处理一个画面的吧
首先,来自CPU的各种物理参数进入GPU,Vertex Shader将对顶点数据进行基本的判断,如果没有需要处理的Vertex效果,则顶点数据直 接进入Transform&Lighting Unit进行传统的T&L操作以节约时间提高效率,如果需要处理各种Vertex效果,则 Vertex Shader将先对各种Vertex Programs的指令进行运算,一般的Vertex Programs中往往包含了过去转换,剪 切,光照运算等所需要实现的效果,故经由Vertex Shader处理的效果一般不需要再进行Transform&Lighting操作;另 外,当遇到涉及到曲面镶嵌(把曲面,比如弓形转换成为多边形或者三角形)的场合时,CPU可以直接将数据交给Vertex Shader进行处理
另外,在DX8.0的Transform过程中,Vertex Shader可以完成Z值的剔除,也就是Back Face Culling—阴面隐去,这就意味着除了视野以外的顶点外,视野内被前面顶点遮住的顶点也会被一并剪除,这大大减轻了需要进行操作的顶点数目
接下来,经由Vertex Shader处理完成的各种数据将流入Setup Engine,在这里一如既往的进行三角形的设置工作,到这里为止,Vertex Shader的工作就完成了
过去,设置好的三角形本来应该带着各自所有的参数进入像素流水线内进行纹理填充和渲染,但现在则不同,在填充之前我们还需要进行Piexl Shader的操作
其实Piexl Shader并非独立存在的,它位于纹理填充单元之后,数据流入像素流水线后先进入纹理填充单元进行纹理填充,然后便是 Piexl Shader单元,经由Piexl Shader单元进行各种处理运算之后再进入像素填充单元进行具体的着色,再经由雾化等操作后,一个完整 的画面就算完成了
值得注意的是,第二代GPU中普遍引入了独立的显示数据管理机制,他们位于Vertex Shader,Setup Engine以及像素流水线之间,负 责数据的更有效率的传输、组合,各种无效值的剔除,数据的压缩以及寄存器的管理等工作,这个单元的出现对整个GPU的工作效率的保证其到了至管重要的作 用。
HyperZ系列:HyperZ技术本身就是一种类似nVIDIA的“Z-封闭甄别”的技术,但是比nVIDIA还更进一步。它的主要功能简单说来就是分 析在Z轴上的场景,被遮挡的就会被忽略掉,只渲染我们能看到的部分场景;然后对渲染过的Z轴场景进行压缩处理,数据的压缩可减少他所占用的空间,从而在存 取Z-Buffer数据的时候可以保留更多的显存带宽。而且这是一种画面质量没有损害的压缩算法,并不影响画面质量。最后一步就是把经过渲染的场景中的Z -Buffer信息立刻清除掉,这样就更加大了显存带宽的利用率。
LMA(光速显存架构)系列:光速显存架构采用的第一个技术是“显存交错控制”技术, LMA中的显存控制器划分成了4个独立的显存控制单元,每个单元最 大可以进行32bit图形相关数据的存取工作,并且这4个单元之间以及它们和图形处理单元之间都保持密切的通讯联系,并随时协调平衡各个子单元之间的数据 流量,因此整体来看LMA的显存控制单元还是可以进行128bit数据的存储,但是保证了显存带宽的充分利用。光速显存架构采用的第二个技术是“无损Z压 缩算法”。传统的图形芯片对于每个待渲染的图形象素都要进行Z轴数据的读写工作,因此存储这些数据的Z缓存一向是消耗显存带宽的大户。LMA中集成了硬件 “无损Z压缩”单元,采用“无损Z压缩算法”对Z-缓存数据进行4:1的完全无损压缩。 光速显存架构采用的第三个技术是“Z-封闭甄别”。排除了图象中 被遮盖住而不可见的部分,这样GPU就不做隐面模型构建(节省处理器的多边形运算资源),并且渲染管线也不对隐面进行渲染(无需从帧缓存中读写隐面资料数 据,节省渲染管线的象素和纹理生成资源并完全消灭了隐面资料对显存带宽的占用)。最后,LMA还包括了4组高速Cache,对数据传输进行缓冲。
3、梦中的镜花水月—可编程Shader2.0以及第三代GPU
当你第一次看到3Dmark03中的MotherNature时,你有没有感觉到震撼?
更加宽泛的色彩范围能够使得图形的逼真度上升,这就是Shader2.0的由来,Shader2.0的核心实际上就是以扩大指令数目以及FLOAT数据形 式的应用来提高色彩表达的精确度,而第三代GPU的Shader单元也由此而具备了高精度FLOAT色彩数据的运算能力。从一般角度来讲,第三代GPU同 第二代GPU相比在基本的操作控制形式等方面并没有本质的区别,但是由于Shader2.0更大的指令长度和指令个数,以及通用程序+子程序调用的程序形 式等使得第三代GPU在处理高精度的庞大指令时效率上有了明显的提升,同时也使得第三代GPU的可编程性跃上了一个新的台阶
让我们来看看第三代GPU到底有哪些改进吧
Vexter Shader部分
第三代GPU的顶点处理器部分除了一般的操作功能外还具备流程控制能力,包括循环,跳跃以及子程序调用等,这些控制指令以及更多向量(或标量)寄存器的应 用使得顶点处理器能够以更高的效率执行Vertex Programs,提高了Vertex的处理速度。同时,加大的指令长度和指令数量使得顶点处理器的 功能得到了进一步的强化。另外,在第三代GPU中,传统的T&L数据将完全交由顶点处理器来执行,Transform& Lighting Unit将彻底被顶点处理器“吞并”,这也是第三代GPU的一个重要特点
Piexl Shader部分
第二代GPU的Piexl Shader只能实现INT数据的运算,这势必会带来最终运算结果的不精确,而数据的不精确导致了颜色表现的不准确,干扰了最 终画面的质量以及效果的表现,第三代GPU的重点改进就是运算单元和寄存器所支持的运算格式,现在Piexl Shader可以进行更高精度的FLOAT 运算和输出,从而使得图形的色彩显示更加精确
暴光正确的图象
数据精度不当而无法实现的特种暴光
另外,第三代GPU的像素处理器每周期所能处理的材质以及指令也分别增加了数倍,这些新特性使得第三代GPU可以处理各种复杂程度的效果,营造一个更为真实的3D画面,比如更加真实的水面效果
INT Piexl Shader所表现的水面效果
FLOAT Piexl Shader所表现的水面效果
传统的INT无法表现宽泛的波浪效果,程序员害怕数据精度范围狭窄引起的上溢或者下溢的发生而不得不在一个很小的物理参数范围内控制涟漪水面所需的波长、 波浪的大小、移动速度以及反射和折射效果等,现在,由于数据精度的提升,像素处理器完全可以处理一个非常宽泛的数据精度范围,避免数据的溢出,这就使得更 加真实的水面效果得以被表现。第三代GPU的代表是NV3X系列,R3XX系列等,其中R3XX系列的基本处理方式和顺序与第二代GPU在本质上基本相 同,仅仅是Vertex Shader和Piexl Shader的具体操作细节和运算精度上有些许不同,而NV3X虽然在基本原理上也与之大略相同,但 从流水线的角度来看则与完全不同,应该算是个“异类”。产生过程,只分析一下NV3X
以NV35为例:
首先,他具有8个纹理帖图单元,但8个纹理贴图单元并不在固定分布于每一条Piexl流水线,而是集簇在一起,根据情况来搭配,可以是4*2、8*1。
其次,他具有12条Shader流水线,但没有全盘采用浮点渲染流水线,而只是把12条Shader流水线中的8条做成具备浮点处理能力;不过全部12条Shader流水线都具备Fixed-Point Shader的执行能力。
另外,NV3X将流水线后部的各种渲染单元,如雾化,Alpha混合等大幅削减,使得流水线在一定程度上公用这些单元
NV30的构架组成形式基本上与之相当,只是数目上略有不同
由于这个构架并不是传统意义上的4*2或者8*1的固定构架,我们不能象过去那样说NV35“每个流水线具有2个纹理帖图单元”或者“每条管线具有3个Shader流水线”……我们只能说“NV35单位周期可以完成8次左右的纹理贴图或者12次Shader操作”
另外,由于NV3X对于Fixed-Point Shader的支持精度是FP16和FP32,同时NV3X的Shader流水线的单位Fixed- Point Shader处理精度是16位,所以当遇到32位Fixed-Point Shader数据时,能进行Fixed-Point Shader 数据处理的8条Shader流水线也会根据情况进行搭配来运算32位的Fixed-Point Shader数据
Pixel Programs往往是由多条指令构成的,不同的指令需要不同的执行时间来完成,每个像素必须在应用在它“身上”的Pixel Shader 操作完成后才能由像素流水线写入到帧缓存里。故此,对于应用了Piexl Shader的像素实际上是需要多个以上的周期才能写入到帧缓存里,如果采用8 条完整的渲染流水线的话, 流水线后面的雾化、色彩混合等单元很多时候都会处在等待阶段,这部分单元需要占用的晶体管数量不在少数,如果这样浪费就怪可惜 的,砍掉后其中的雾化等单元后,对整体的性能虽然有一些影响,但是却可以把节省下来的晶体管用于加强Pixel Shader的功能和性能上来,同时可以 保证比较高的多重纹理效率,利大于弊。
简单的,这个有点诡异的体系节省晶体管的同时能确保相对较好的Pixel Shader效能,同时还有极高的多重贴图效能
nVidia本指望4条Pixel管线+ 12条Shader流水线的设计能够在现在以及未来较长的一段时间的游戏里提供超过4条甚至8条 Pixel Pipeline显卡的效能。不过,实际情况却与nVidia的初衷有些背道而驰,Shader的完美应用带来的一个结果就是越来越好的非多 纹理光效果,传统的多纹理贴图才能表现的很好的光效果现在只需要进行一次贴图或者直接使用Shader就可以达到,这使得NV3X的设计成为了空架子,实 用意义大大降低,而在单纹理处理过程中由于NV3X的后续效果单元被削减,它的渲染效能注定没有传统的完整流水线高,另外,由于DX9中的最终FP精度被 定义为FP24,这导致了NV3X的相对低下的FP效能。最终,本来“先进”的NV3X构架落的个整体效能低下的下场
从本质上来讲,图形数据在NV3X中的实际处理过程依然是沿着顶点处理器—Setup Engine—像素流水线的顺序进行的,这与R3XX以及所有的第二代GPU是相同的
天堂的入口—可编程Shader3.0,DriectX Next以及未来的GPU
在微软刚刚公布的Driect9.0C中,Vertex Shader和Piexl Shader已经具有了几乎相同的能力,而在nVidia新发布的第 四代GPU—NV40中,我们发现Vertex Shader包含了4个纹理取样器,可以使用texld指令进行查表操作, NV40可以在一个 shader pass里完成4个纹理的读取,这个对于通用替换贴图而言相当的重要,有了vertex texturing功能后, vertex shader就能读取纹理信息直接映射到顶点上,以实现displacement mapping(位移映射)等等效果,用不同的纹理和较 少的顶点传输时间就能实现外形复杂、平滑的模型,这表明GPU中Vertex Shader的功能正在逐渐接近Piexl Shader。随着GPU的发 展,未来GPU中的Vertex Shader和Piexl Shader最终将被合并成一个统一的处理单元—Intergrated Shader,两 种处理单元将使用完全相同的语法以及指令集,Shader的统一将带来完全不同与现在的数据执行处理方式,GPU的内部结构将发生本质的变化, Intergrated Shader带来了更低晶体管数目的解决方案,以更少的晶体管数目来完成现在需要数亿晶体管才能完成的功能,同时统一 Shader将引出类似全通用I/O接口的设计以利资源的更合理的传输和分配,同时,为了解决越来越庞大的数据量,虚拟显存、无限资源访问以及帧缓冲操作 等技术的引入也势在必行。另外,我们在DirectX Next中还发现了整数指令集,处理器等特殊的定义,这些新颖的设计为我们勾勒出了未来GPU的轮 廓
整数指令集
在编程中不必在担心指令限制是一个很大的进步,不过想使得GPU更为通用还需要更多的工作。一个需要提高的主要区域就是整数处理能力。目前基于在着色器中 处理的所有数据都是浮点,这对于大多数显卡操作而言是没有问题的,不过不适合动态分支预测、非内插式显存搜索(如顶点缓冲的索引)等操作。在目前的GPU 中,唯一的内存寻址就是纹理查找,使用的也是浮点值。这样的情况对于纹理定位而言没有什么问题,不过对于通用内存寻址而言就不合适了,这里的连续内存块可 以完全彼此没有关联,采用内插式查找没有任何意义。微软对于这样的情况,在4.0版的Shader模型中引入了全新的、完整的整数指令集。拓扑处理器实际 上,目前的显卡可以在某些情况下新生成三角形,比如在用到直线以及点的时候。大多数的娱乐级显卡只具备对三角形进行光栅化处理的能力,这也就意味着所有的 点、线就必须转化为三角形。点和线在最后都将以2个三角形结束,这样就需要用到2-6个顶点(根据索引方式的不同而变化)。从本质上来说,这样的做法是有 益处的,通过可编程的管线,显示先前应该遮蔽的场景也就无需通过CPU,而可以通过微软的“拓扑处理器”直接完成。从逻辑上来说,这个拓扑处理器和镶嵌单 元是相互独立的,这个处理器在两种操作集中均可以使用。由目前的趋势来看,未来的GPU将向着高运算能力,高精度,高通用性的方向发展,GPU在工作方式 上将越来越接近CPU,由于高通用性等CPU特性的引入,GPU可能在一定程度上替代一部分CPU在非绘图领域的工作,也许在未来我们会看到由全GPU组 成的图形工作站。尽管未来GPU需要面对由于这些改进而带来得的诸多问题,尤其是通用性导致的效率低下,比如Intergrated Shader的效率 低下,但随着时间的推移,各种问题都将会得到妥善的解决。

Ⅸ c# 如何使用gpu计算

如何通过编程将GPU用于通用计算任务

随着现代图形处理器(GPU)可编程能力及性能的提高,应用开发商们一直希望图形硬件可以解决以前只有通用CPU才能完成的高密集计算任务。尽管利用通用GPU进行计算很有发展前景,但传统图像应用编程接口仍然将GPU抽象成一个包括纹理、三角形和像素在内的图像绘制器。寻找一种能够使用这些基本元素的映射算法并不是一项简单的操作,即便对最先进的图形开发商而言也是如此。
幸运的是,基于GPU的计算从概念上讲很容易理解,并且现有多种高级语言和软件工具可以简化GPU的编程工作。但是,开发商必须首先了解GPU在图像绘制过程中是如何工作的,然后才能确定可用于计算的各个组件。
在绘制图像时,GPU首先接收宿主系统以三角顶点形式发送的几何数据。这些顶点数据由一个可编程的顶点处理器进行处理,该处理器可以完成几何变换、亮度计算等任何三角形计算。接下来,这些三角形由一个固定功能的光栅器转换成显示在屏幕上的单独“碎片(fragment)”。在屏幕显示之前,每个碎片都通过一个可编程的碎片处理器计算最终颜色值。

计算碎片颜色的运算一般包括集合向量数学操作以及从“纹理”中提取存储数据,“纹理”是一种存储表面材料颜色的位图。最终绘制的场景可以显示在输出设备上,或是从GPU的存储器重新复制到宿主处理器中。
可编程顶点处理器和碎片处理器提供了许多相同的功能和指令集。但是,大部分GPU编程人员只将碎片处理器用于通用计算任务,因为它通常提供更优的性能,而且可以直接输出到存储器。
利用碎片处理器进行计算的一个简单例子是对两个向量进行相加。首先,我们发布一个大三角形,其所包含的碎片数量和向量大小(容纳的元素)相同。产生的碎片通过碎片处理器进行处理,处理器以单指令多数据(SIMD)的并行方式执行代码。进行向量相加的代码从存储器中提取两个待加元素,并根据碎片的位置进行向量相加,同时为结果分配输出颜色。输出存储器保存了向量和,这个值在下一步计算中可以被任意使用。
可编程碎片处理器的ISA类似于DSP或Pentium SSE的指令集,由四路SIMD指令和寄存器组成。这些指令包括标准数·运算、存储器提取指令和几个专用图形指令。
GPU与DSP的比较
GPU在几个主要方面有别于DSP架构。其所有计算均使用浮点算法,而且目前还没有位或整数运算指令。此外,由于GPU专为图像处理设计,因此存储系统实际上是一个二维的分段存储空间,包括一个区段号(从中读取图像)和二维地址(图像中的X、Y坐标)。
此外,没有任何间接写指令。输出写地址由光栅处理器确定,而且不能由程序改变。这对于自然分布在存储器之中的算法而言是极大的挑战。最后一点,不同碎片的处理过程间不允许通信。实际上,碎片处理器是一个SIMD数据并行执行单元,在所有碎片中独立执行代码。
尽管有上述约束,但是GPU还是可以有效地执行多种运算,从线性代数和信号处理到数值仿真。虽然概念简单,但新用户在使用GPU计算时还是会感到迷惑,因为GPU需要专有的图形知识。这种情况下,一些软件工具可以提供帮助。两种高级描影语言CG和HLSL能够让用户编写类似C的代码,随后编译成碎片程序汇编语言。这些语言编译器可以从Nvidia和微软公司的网站免费下载。尽管这些语言大大简化了描影汇编代码的编写,但实际应用时仍然必须使用图形API来建立并发布计算任务。
Brook是专为GPU计算设计,且不需要图形知识的高级语言。因此对第一次使用GPU进行开发的工作人员而言,它可以算是一个很好的起点。Brook是C语言的延伸,整合了可以直接映射到GPU的简单数据并行编程构造。
经GPU存储和操作的数据被形象地比喻成“流”(stream),类似于标准C中的数组。核心(Kernel)是在流上操作的函数。在一系列输入流上调用一个核心函数意味着在流元素上实施了隐含的循环,即对每一个流元素调用核心体。Brook还提供了约简机制,例如对一个流中所有的元素进行和、最大值或乘积计算。
Brook编译器是一个源到源的编译器,能够把用户的核心代码映射成碎片汇编语言,并生成C++短代码,从而链接到大型应用中。这允许用户只把应用中的性能关键部分输入Brook。Brook还完全隐藏了图形API的所有细节,并把GPU中类似二维存储器系统这样许多用户不熟悉的部分进行了虚拟化处理。
用Brook编写的应用程序包括线性代数子程序、快速傅立叶转换、光线追踪和图像处理。Brook的编译器和实时运行环境可以从http://brook网站上免费获取。
sourceforge.net网站也为许多此类应用提供资源。利用ATI的X800XT和Nvidia的GeForce 6800 Ultra型GPU,在相同高速缓存、SSE汇编优化Pentium 4执行条件下,许多此类应用的速度提升高达7倍之多。
对GPU计算感兴趣的用户努力将算法映射到图形基本元素。类似Brook这样的高级编程语言的问世使编程新手也能够很容易就掌握GPU的性能优势。访问GPU计算功能的便利性也使得GPU的演变将继续下去,不仅仅作为绘制引擎,而是会成为个人电脑的主要计算引擎。

Ⅹ 关于GPU的问题!

目录:
第一章:第二代及以后的GPU工作流程简介
第二章:DirectX8和DirectX9 GPU的传统流水线
第三章:顶点和像素操作指令
第四章:传统GPU指令的执行
第五章:统一渲染架构
第六章:G80和R600的统一渲染架构实现
第七章:G80与R600效能对比
第八章:尴尬的中端--Geforce8600简析

前面4章 我将先简要介绍下DirectX8/9显卡的核心----图形处理单元GPU的工作流程和指令处理情况
从第5章开始讨论统一渲染架构、新一代DirectX10 GPU的特性,G80/Geforce8800与R600/RadeonHD2900XT的架构具体实现及其区别。最后将会对中端最受关注的Geforce8600进行相应的简单分析。

第一章:第二代及以后的GPU工作流程简介

简单(而不一定绝对科学)的说:GPU主要完成对3D图形的处理--图形的生成渲染。

GPU的图形(处理)流水线完成如下的工作:(并不一定是按照如下顺序)
顶点处理:这阶段GPU读取描述3D图形外观的顶点数据并根据顶点数据确定3D图形的形状及位置关系,建立起3D图形的骨架。在支持DX8和DX9规格的GPU中,这些工作由硬件实现的Vertex Shader(定点着色器)完成。
光栅化计算:显示器实际显示的图像是由像素组成的,我们需要将上面生成的图形上的点和线通过一定的算法转换到相应的像素点。把一个矢量图形转换为一系列像素点的过程就称为光栅化。例如,一条数学表示的斜线段,最终被转化成阶梯状的连续像素点。
纹理帖图:顶点单元生成的多边形只构成了3D物体的轮廓,而纹理映射(texture mapping)工作完成对多变形表面的帖图,通俗的说,就是将多边形的表面贴上相应的图片,从而生成“真实”的图形。TMU(Texture mapping unit)即是用来完成此项工作。
像素处理:这阶段(在对每个像素进行光栅化处理期间)GPU完成对像素的计算和处理,从而确定每个像素的最终属性。在支持DX8和DX9规格的GPU中,这些工作由硬件实现的Pixel Shader(像素着色器)完成。
最终输出:由ROP(光栅化引擎)最终完成像素的输出,1帧渲染完毕后,被送到显存帧缓冲区。

总结:GPU的工作通俗的来说就是完成3D图形的生成,将图形映射到相应的像素点上,对每个像素进行计算确定最终颜色并完成输出。

第二章:DirectX8和DirectX9 GPU的传统流水线

前面的工作流程其实已经说明了问题。本章来总结一下,承前启后。
传统的GPU功能部件我们不妨将其分为顶点单元和像素流水线两部分。
顶点单元由数个硬件实现的Vertex Shader组成。
传统的像素流水线由几组PSU(Pixel Shader Unit)+TMU+ROP组成。
于是,传统的GPU由顶点单元生成多边形,并由像素流水线负责像素渲染和输出。

对于像素流水线需要做的说明是:虽然传统的流水线被认为=1PSU+1TMU+1ROP,但这个比例不是恒定的,例如在RadeonX1000(不包括X1800)系列中被广为称道的3:1黄金架构,PSU:TMU:ROP的数量为3:1:1。一块典型的X1900显卡具有48个PSU,16个TMU和16个ROP。之所以采用这种设计方法,主要考虑到在当今的游戏中,像素指令数要远远大于纹理指令的数量。ATI凭借这个优秀的架构,成功击败了Geforce7,在DX9后期取得了3D效能上的领先。

总结:传统的GPU由顶点单元生成多边形,像素流水线渲染像素并输出,一条像素流水线包含PSU,TMU,和ROP(有的资料中不包含ROP),比例通常为1:1:1,但不固定。

第三章:顶点和像素操作指令

GPU通过执行相应的指令来完成对顶点和像素的操作。
熟悉OpenGL或Direct3D编程的人应该知道,像素通常使用RGB三原色和alpha值共4个通道(属性)来描述。而对于顶点,也通常使用XYZ和W 4个通道(属性)来描述。因而,通常执行一条顶点和像素指令需要完成4次计算,我们这里成这种指令为4D矢量指令(4维)。当然,并不是所有的指令都是4D指令,在实际处理中,还会出现大量的1D标量指令以及2D,3D指令。

总结:由于定点和像素通常用4元组表示属性,因而顶点和像素操作通常是4D矢量操作,但也存在标量操作。

第四章:传统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的资源都被闲置。为了提高PS VS执行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
对于传统的4D ALU,显然需要两个周期才能完成,第一个周期ALU利用率75% ,第二个周期利用率25%。而对于1D+3D的ALU,这两条指令可以融合为一条4D指令,因而只需要一个周期便可以完成,ALU利用率100%。
但当然,即使采用co-issue,ALU利用率也不可能总达到100%,这涉及到指令并行的相关性等问题,而且,更直观的,上述两条指令显然不能被2D+2D ALU一周期完成,而且同样,两条2D指令也不能被1D+3D ALU一周期完成。传统GPU在对非4D指令的处理显然不是很灵活。

总结:传统的GPU中定点和像素处理分别由VS和PS来完成,每个VS PS单元中通常有一个4D ALU,可以在一个周期完成4D矢量操作,但这种ALU对1D 2D 3D操作效率低下,为了弥补,DX9显卡中ALU常被设置为1D+3D 2D+2D等形式。

第五章:统一渲染架构

相对于DirectX 9来说,最新的DirectX 10最大的改进在于提出了统一渲染架构,即Unified Shader。
传统的显卡GPU一直采用分离式架构,顶点处理和像素处理分别由Vertex Shader和Pixel Shader来完成,于是,当GPU核心设计完成时,PS和VS的数量便确定下来了。但是不同的游戏对于两者处理量需求是不同的,这种固定比例的PS VS设计显然不够灵活,为了解决这个问题,DirectX10规范中提出了了统一渲染架构。
不论是顶点数据还是像素数据,他们在计算上都有很多共同点,例如通常情况下,他们都是4D矢量,而且在ALU中的计算都是没有分别的浮点运算。这些为统一渲染的实现提供了可能。
在统一渲染架构中,PS单元和VS单元都被通用的US单元所取代,nVidia的实现中称其为streaming processer,即流处理器,这种US单元既可以处理顶点数据,又可以处理像素数据,因而GPU可以根据实际处理需求进行灵活的分配,这样便有效避免了传统分离式架构中VS和PS工作量不均的情况。

总结:统一渲染架构使用US(通常为SP)单元取代了传统的固定数目的VS和PS单元,US既可以完成顶点操作,又可以完成像素操作,因而可以根据游戏需要灵活分配,从而提高了资源利用率。

第六章:G80和R600的统一渲染架构实现

以下我们着重讨论G80和R600的统一着色单元而不考虑纹理单元,ROP等因素。
G80 GPU中安排了16组共128个统一标量着色器,被叫做stream processors,后面我们将其简称为SP。每个SP都包含有一个全功能的1D ALU。该ALU可以在一周期内完成乘加操作(MADD)。
也许有人已经注意到了,在前面传统GPU中VS和PS的ALU都是4D的,但在这里,每个SP中的ALU都是1D标量ALU。没错,这就是很多资料中提及的MIMD(多指令多数据)架构,G80走的是彻底的标量化路线,将ALU拆分为了最基本的1D 标量ALU,并实现了128个1D标量SP,于是,传统GPU中一个周期完成的4D矢量操作,在这种标量SP中需4个周期才能完成,或者说,1个4D操作需要4个SP并行处理完成。
这种实现的最大好处是灵活,不论是1D,2D,3D,4D指令,G80得便宜其全部将其拆成1D指令来处理。指令其实与矢量运算拆分一样。
例如一个4D矢量指令 ADD R0.xyzw , R0,R1 R0与R1矢量相加,结果赋R0
G80的编译器会将其拆分为4个1D标量运算指令并将其分派给4个SP:
ADD R0.x , R0,R1
ADD R0.y , R0,R1
ADD R0.z , R0,R1
ADD R0.w, R0,R1
综上:G80的架构可以用128X1D来描述。

R600的实现方式则与G80有很大的不同,它仍然采用SIMD架构。
在R600的核心里,共设计了4组共64个流处理器,但每个处理器中拥有1个5D ALU,其实更加准确地说,应该是5个1D ALU。因为每个流处理器中的ALU可以任意以1+1+1+1+1或1+4或2+3等方式搭配(以往的GPU往往只能是1D+3D或2D+2D)。ATI将这些ALU称作streaming processing unit,因而,ATI宣称R600拥有320个SPU。
我们考虑R600的每个流处理器,它每个周期只能执行一条指令,但是流处理器中却拥有5个1D ALU。ATI为了提高ALU利用率,采用了VLIW体系(Very Large Instruction Word)设计。将多个短指令合并成为一组长的指令交给流处理器去执行。例如,R600可以5条1D指令合并为一组5DVLIW指令。
对于下述指令:
ADD R0.xyz , R0,R1 //3D
ADD R4.x , R4,R5 //1D
ADD R2.x , R2,R3 //1D
R600也可以将其集成为一条VLIW指令在一个周期完成。
综上:R600的架构可以用64X5D的方式来描述。

总结:G80将操作彻底标量化,内置128个1D标量SP,每个SP中有一个1D ALU,每周期处理一个1D操作,对于4D矢量操作,则将其拆分为4个1D标量操作。
R600仍采用SIMD架构,拥有64个SP,每个SP中有5个1D ALU,因而通常声称R600有320个PSU,
每个SP只能处理一条指令,ATI采用VLIW体系将短指令集成为长的VLIW指令来提高资源利用率,例如5条1D标量指令可以被集成为一条VLIW指令送入SP中在一个周期完成。

第七章:G80与R600效能对比

从前一章的讨论可以看出,R600的ALU规模64X5D=320明显比G80的128X1D=128要大,但是为何在实际的测试中,基于R600的RadeonHD2900XT并没有取得对G80/Geforce8800GTX的性能优势?本章将试图从两者流处理器设计差别上来寻找答案,对于纹理单元,ROP,显存带宽则不做重点讨论。事实上,R600的显存带宽也要大于G80。
我们将从频率和执行效能两个方面来说明问题:
1、频率:G80只拥有128个1D流处理器,在规模上处于绝对劣势,于是nVidia采用了shader频率与核心频率异步的方式来提高性能。Geforce8800GTX虽然核心频率只有575MHZ,但shader频率却高达1375MHZ,即SP工作频率为核心频率的两倍以上,而R600则相对保守地采用了shader和核心同步的方式,在RadeonHD2900XT中,两者均为740MHZ。这样一来,G80的shader频率几乎是R600的两倍,于是就相当于同频率下G80的SP数加倍达到256个,与R600的320个接近了很多。在处理乘加(MADD)指令的时候,740MHZ的R600的理论峰值浮点运算速度为:740MHZ*64*5*2=473.6GFLOPS 而shader频率为1350MHZ的G80的浮点运算速度为:1350MHZ*128*1*2=345.6GFLOPS,两者的差距并不像SP规模差距那么大。
2、执行效能:G80虽说shader频率很高,但由于数量差距悬殊,即使异步也无法补回理论运算速率的差距。于是,要寻找答案,还要从两者流处理器的具体设计着手。
在G80中,每个矢量操作都会被拆分为1D标量操作来分配给不同的SP来处理,如果不考虑指令并行性等问题,G80在任何时刻,所有SP都是充分利用的。而R600则没这么幸运,因为每个流处理器只能同时处理一条指令,因而R600要将短指令合并为能充分利用SP内5DALU运算资源的VLIW指令,但是这种合并并不是总能成功。目前没有资料表明R600可以将指令拆开重组,也就是说,R600不能每时每刻都找到合适的指令拼接为5D指令来满载他的5D SP,这样的话我们假设处理纯4D指令的情况,不能拆分重组的话,R600每个SP只能处理一条4D指令,利用率80%,而对于G80,将指令拆开成1D操作,无论何时都能100%利用。而且,R600的结构对编译器的要求很高,编译器必须尽可能寻找Shader指令中的并行性,并将其拼接为合适的长指令,而G80则只需简单拆分即可。
另外还需要说明的一点是,R600中每个SP的5个1D ALU并不是全功能的,据相关资料,每组5个ALU中,只有一个能执行函数运算,浮点运算和Multipy运算,但不能进行ADD运算,其余的4各职能执行MADD运算。而G80的每个1D ALU是全功能的,这一点也在一定程度上影响了R600的效能。

总结:虽然R600的ALU规模远大于G80,但G80的SP运行频率几乎是R600的两倍,而且G80的体系架构采用完全标量化的计算,资源利用率更高,执行效能也更高,因而总体性能不落后于R600。

第八章:尴尬的中端--Geforce8600简析

在新一代中端显卡中,最早发布也是最受关注的莫过于nVidia的G84---Geforce8600系列。
但是相比其高高在上的价格,它的性能表现实在不尽如人意,很多测试中均落后于价格低于它的老一代高端显卡Geforce7900GS。本章将利用前面讨论的结论对G84核心的SP处理能力作简要地分析。
G84是G80核心的高度精简版本,SP数量从G80的128个锐减为32个,显存位宽也降为1/3--128bit。
抛开显存位宽和TMU ROP,我们着重看SP,G84的SP频率与核心频率也不相同,例如8600GT,核心频率只有540MHZ,shader频率却高达1242MHZ,即核心频率的两倍多,我们粗略按两倍记,则G84核心相当于核心shader同步的64(个1D标量) SP,而传统的VS和PS中ALU是4D的,于是可以说G84的计算能力相当于传统VS和PS总数为64/4=16的显卡,粗略比较,它与Geforce7600(PS+VS=17)的计算能力相近。但当然,事实这样比较是有问题的,因为在G7X中,每个PS中有两个4D ALU,因而7600的运算能力高于传统PS+VS=17的显卡。下面的计算就说明了问题:(MADD操作)
对于7600GT ,VS为4D+1D PS为4D+4D 核心频率560MHZ 理论峰值浮点运算速度:
560MHZ*(12*(4+4)+5*(1+4))*2=135.52GFLOPS
而对于8600GT:1242MHZ*32*1*2=79.4GFLOPS
由此可见,8600GT的峰值运算速度甚至远低于上代的7600GT,更不用跟7900GS相比了。但是,实际情况下,迫于传统架构所限,G7X满载的情况基本不可能出现,G7X的实际运算速率要远低于理论值,而对于G8X架构,执行效率则高很多,实际运算速率会更加接近理论极限。而且支持SM4.0的G8X寄存器数目也要远多于G7X,众多效率优势,使得Geforce8600GT仅凭借少量的SP就足以击败上代中端7600GT。
但是作为DX10显卡,仅仅击败7600GT显然不是最终目标,仅32SP的它在计算量要求空前之高的DX10游戏中表现极差,根本不能满足玩家要求。

总结:8600GT性能上取代7600GT的目标凭借着高效的统一渲染架构总算勉强完成,但过少的SP数量使得其显然难以击败上代高端,更不用说流畅运行DX10游戏了,而高高在上的价位更使其处境不利,归根到底,nVidia对G84 SP数量的吝啬以及过高的价格定位造就了Geforce8600的尴尬,因此,就目前的情况来看,选用8600系列显然不如Geforce7900和RadeonX1950GT来的划算。

阅读全文

与gpu信息如何传给算法相关的资料

热点内容
安卓软件怎么还原之前的版本 浏览:869
什么app可以看舌神综艺 浏览:278
vba编好的程序编译出来 浏览:91
如何清空服务器数据 浏览:33
android计划软件 浏览:383
vivo手机文件夹加密路径 浏览:131
程序员怎么找到联通卡 浏览:196
单片机实训要求 浏览:268
程序员八大黑话 浏览:946
除了天天鉴宝app还有什么 浏览:628
cs中的文件夹 浏览:792
php获取内存地址 浏览:679
看电视直播节目什么app最好 浏览:30
如何连子文件里面的文件一起解压 浏览:72
怎么用单片机识别天气 浏览:877
单片机实验室认识 浏览:142
我的世界pe112服务器地址 浏览:886
程序员转行销售 浏览:468
沈阳医疗程序员 浏览:47
戴尔服务器主机系统如何安装 浏览:958