《AMD和NVIDIA的GPU特点及优势》由会员分享,可在线阅读,更多相关《AMD和NVIDIA的GPU特点及优势(5页珍藏版)》请在金锄头文库上搜索。
1、AMD和NVIDIA的GPU特点及优势发表时间:2011-4-25作者: 熊东旭 来源: e-works关键字:GPU图形处理器AMD GPUNVDIA GPU作为图形工作站标志性的配件,专业显卡良好的抗锯齿功能帮助图形工作站处理复杂的 三维模型,保证线条的光滑。除线条抗锯齿功能,专业显卡对重叠图形、动态光源、图形剖切等操作的处理,与普通显卡也有着非常大的不同。作为专业显卡领域仅有的两家厂商,AMD和NVIDIA的专业显卡在性能和价格上都日益趋于同质化,纯粹的从性能和价格两方 面来讨论两家产品孰优孰劣已不合适。为了更加深入的了解两家厂商专业级显卡产品的硬件 特性, e-works 将从两家厂商
2、的 GPU 架构着手来讨论两家产品的优势及不足。一、GPU与显卡简单来说,GPU与显卡的关系就好比CPU与主板的关系,主板有了 CPU才有了动力之 源,利用CPU提供的动能,主板才可以实现各种功能。同理,显卡之所以能加速图形图像 处理,也是因为GPU为显卡提供了强大的运算能力。专业显卡发展到今天,无论是AMD 还是NVIDIA,功能上已经日趋同质化,NVIDIA专业显卡能实现的功能,AMD也能实现, 但从GPU运算能力来讲,两家厂商还是有一定可比较性。二、AMD 与 NVIDIA 的 GPU 架构对于像素的特点,相关的文章也讨论的比较多。任何一个像素都包含着两种不同的属性 信息,即色彩和坐标。
3、色彩信息包括RGB三原色和一个信息通道Alpha;坐标信息包括XYZ 三维坐标信息和一个重力元素W。为对像素完成一次色彩计算和坐标转换,GPU的顶点着 色单元和像素着色单元从一开始就被设计成为一个周期内具备4 次运算能力的逻辑运算器, 这便是4D矢量逻辑运算器的由来。(1)AMD基于SIMD结构的流处理器AMD 的 GPU 采用的是 SIMD 架构模式,SIMD 即 Single Instruction Multiple Data,单 指令多数据,这种架构能很好的对像素的色彩和坐标所包含的四维数据进行运算。传统的顶 点单元和像素单元中的ALU都能在一个周期内完成对4D矢量数据的运算。因此,通常
4、称 这种逻辑运算器为 4D ALU。图 1 SIMD 架构图1为SIMD架构流处理器的运算模式,通过唯一的指令发射端向所属的ALU发送运 算需求,ALU在接收到运算指令后开始并行计算。需要注意的是,4D SIMD架构虽然很适 合处理4D指令,但遇到1D指令的时候效率便会降为原来的1/4。此时的ALU,3/4的资源都被闲置。为了提高像素单元和顶点单元执行1D 2D 3D指令时的资源利用率,从DirectX9 时代开始,AMD的GPU通常采用1D+3D或2D+2D ALU。这便是Co-issue技术。这种ALU 对4D指令的计算时仍然效能与传统的ALU相同,但当遇到1D 2D 3D指令时效率则会高
5、不 少,例如如下指令:ADD R0.xyz , R0,R1此指令是将RO,R1矢量的x,y,z值相加 结果赋值给R0ADD 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 一周期完成,而
6、且同样,两条2D指令也不能被1D+3D ALU 一 周期完成。传统GPU在对非4D指令的处理显然不是很灵活。prev instructprev instructprev instructload A(1)load A(2)load A(n)load B(1)load B(2)load B(n)C(2)=A(2)*B(2)C(n)=A(n)B(n)store C(1)store C(2)stars C(n)next instructnext instructnext instructP1 图2 AMD ED ALU流处理器卩f l为进一步改善流处理器的运算性能,AMD推出了代号为R600的显卡核
7、心,该GPU采 用了统一渲染架构,采用了5路超标量运算单元,通过在流处理器内部集成5个1D标量运 算单元,每一个流处理器都能进行1+1+1+1+1或1+4或2+3等方式搭配运算。同时,为提 升 ALU 运算效率, AMD 采用了 VLIW 体系设计,将多个短指令合并为一个超长指令交给 流处理器去执行。对于下述指令:ADD R0.xyz , R0,R1 /3DADD R4.x , R4,R5 /1DADD R2.x , R2,R3/1DR600也可以将其集成为一条VLIW指令在一个周期完成。综上:R600的架构可以用64X5D的方式来描述。prev instructprev instructpr
8、ev instructload A(1)load A(2)load B(1)load B(2)C(2)=A(2fB(2)store C(1)store C(2)next instructSinext instructP2next instructPnload A(n)load B(n)C(n)=A(n)*B(n)store C(n)图 3 R600 流处理器R600采用SIMD架构,拥有64个SP,每个SP中有5个1D ALU,因而通常声称R600 有320个PSU,每个SP只能处理一条指令,ATI采用VLIW体系将短指令集成为长的VLIW指令来提高资源利用率,例如5条1D标量指令可以被集成为
9、一条VLIW指令送入SP中在 一个周期完成。(2) NVIDIA基于MIMD结构的流处理器与AMD GPU的SIMD架构不同,NVIDIA GPU所采用的是MIMD架构,即多指令多 数据。这种指令架构,使NVIDIA GPU的指令控制系统要比AMD GPU复杂。在NVIDIA 看来,一味的追求流处理器数量,并不意味着高效率的计算性能。prev instructprev instructprev instructload A(1)load A(2)load BC(2)=A(2)*B (2)store C(2)store C(1)next instructnext instructP2next i
10、nstruct-Pnload A(n)load B(n)C(n)=A(n)*B(n)store C(n)图4 G80核心架构从G80核心开始,NVIDIA的GPU采用了统一运算单元,并开始走彻底标量化路线, 在G80 GPU内部,NVIDIA将ALU拆分为最基本的1D标量运算单元,实现了 128个标量 流处理器,所有的运算指令都会被拆分为1D标量指令进行运算,理想情况下,能保证所有 运算效率都达到 100%。例如一个4D矢量指令ADD RO.xyzw , RO,R1 R0与R1矢量相加,结果赋R0G80的编译器会将其拆分为4个1D标量运算指令并将其分派给4个SP:ADD R0.x , R0,R
11、1ADD R0.y , R0,R1ADD R0.z , R0,R1ADD R0.w, R0,R1综上:G80的架构可以用128X1D来描述。这种流处理器设计方式抛弃了单独追求浮点 吞吐的目标,转而优化流处理器内部结构来换取更高的执行效率。但是它也有明显的问题就 是需要使用更多发射端和周边寄存器资源来支撑这种被“打散”的流处理器运行,芯片集成度 和面积相对于ATI都有较大提升,必须严格控制发热和功耗。三、两家GPU架构的优势和不足现在的AMD,最大的追求就是在尽可能保证小尺寸核心的基础上,提供尽可能多的性能。 或者这话应该换一种方式说?堆垛晶体管的临界点,出现在增加晶体管所导致的性能增加出 现拐
12、点的那一刻。当堆垛晶体管所能够换来的性能增幅明显下降的时候,就停止堆垛晶体管。疯狂的ALU运算器规模堆砌,让NVIDIA毫无招架之力,同时坚持以效率致胜的MIMD 结构流处理器长期无法摆脱晶体管占用量大的烦恼,运算器规模无法快速增长。 Fermi 架构 完全放弃了一味追求吞吐的架构设计方向,这一点在通用计算或者说复杂的Shader领域值 得肯定,但是遇到传统编程方式的图形运算,还是因为架构过于超前显得适应性不足。RV770可以说是AMD化腐朽为神奇的力作,较之R600, RV770不仅将公共汽车一般 缓慢的Ringbus换成了高速直连的Crossbar,而且还追加了大量的资源,比如为16个VL
13、IW CORE 配置了 16K 的 Local Data Share,同时将原有的 Global Data Share 容量翻倍到了 16K, 在此基础上,还将VLIW CORE规模整体放大到了 R600的250% (320个提升到800个), 另外,在后端配置的RBE单元以及更加完善的TA/TF也促成了 RV770的脱胎换骨。在扩展ALU资源的基础之上,AMD还在做着另外一件事,那就是尽一切可能逐步优 化较为古老和低效的SIMD结构。在RV7中对LDS的空间直接读写操作管理等改进就是这 类努力地开始。这导致了 R600和R770在Shader Program执行方面有很大差别。R600的 S
14、hader Program 是 Vertical Mode (5D) +Horizontal Mode (16x5D)的混合模式。而 RV770 是单纯的 Vertical Mode(16x4D=64D & 16*1D=16D,即 64D+16D)。简单的说,RV770更加趋紧于NV50 Shader Unit的执行方式,而R600则相去甚远。总 的来说,NV更加趋紧于使用基于硬件调度器的Superscalar方式来开发ILP,而AMD更加 趋紧于基于软件编译器调度的VLIW方式来开发ILP。到了 RV870架构,AMD控制甚至紧缩资源,然后靠制程来拼规模,并最终让SIMD尽 可能接近通过暴力
15、吞吐掩盖延迟的最理想结局。然后就出现了我们现在看到的拥有1600个 流处理器,体积却依然小于Fermi架构GF100的Radeon HD5870显卡。AMD从R600核心开始,一直延续着上述理念设计GPU产品,R600身上有很多传统 GPU的影子,其Stream Processing Units很像上代的Shader Units,它依然是传统的SIMD架 构。这些SIMD架构的5D ALU使用VLIW技术,可以用一条指令完成多个对数值的计算。由于内部的5个1D ALU共享同一个指令发射端口,因此宏观上R600应该算是SIMD (单指令多数据流)的5D矢量架构。但是R600内部的这5个ALU与传统GPU的ALU有 所不同,它们是各自独立能够处理任意组合的1D/2D/3D/4D/5D指令,完美支持Co-issue(矢 量指令和标量指令并行执行),因此微观上可以将其称为5D Superscalar超标量架构。prev instructprev instructprev instructload A(1)load A(2)load A(n)load B(1)load 日(2)load B(n)C(2)=A(2)*B(2)C(n)=A(n)*B(n)s