Computex泄密 独家解析AMD下代GPU架构
● NVIDIA用几何处理能力激怒AMD
相对于图形渲染能力(Rendering),几何能力(Geometry)在过去没有引起人们的足够重视。而NVIDIA设计的Fermi架构则重点强调几何处理能力,这个设计方向非常吻合DirectX 11提出的要求,也增强了画面的真实感。可以说几何能力(Geometry)的飞速提升,是GPU光栅化发展历程中的重要一步。
在本次Computex电脑展之前,NVIDIA已经发布了Fermi架构的GTX400系列产品,而在Computex电脑展开幕当天,基于Fermi架构的GTX465产品也亮丽登场。NVIDIA称Fermi GF100是一个全新架构,不但是通用计算方面,游戏方面它也发生了翻天覆地的变化,几乎每一个原有模块都进行了重组。特别是还有新增的光栅引擎(Raster Engine)和多形体引擎(PolyMorph Engine),这两个概念的提出,为GPU的几何处理能力打下坚实基础。
在过去的几年中,确切说是从Geforce 5800到Geforce GT200的这几年间,GPU的着色器Shader计算能力提升了150倍,这几乎全部是因为大量的顶点和像素处理压力所致。而游戏开发商大都喜欢已经烘焙好的材质不愿意也没有考虑过使用更为真实自由的材质。
正是在这种思路的指导下,GPU的几何处理能力发展缓慢,在着色器Shader计算能力迅猛提升的前提下,几何处理能力只提升了3倍。并且负责几何处理的GPU单元基本上没有发生什么变化,完全是依赖规模的堆积和频率的提升来被动提高性能。
Fermi架构拥有数量庞大的曲面细分单元(Tessellator)
Fermi架构的多形体引擎则要负责顶点拾取(Vertex Fetch)、曲面细分(Tessellation)、视口转换(Viewport Transform)、属性设定(Attribute Setup)、流输出(Stream Output)等五个方面的处理工作,DX11中最大的变化之一曲面细分单元(Tessellator)就在这里。Fermi GF100产品中有16个多形体引擎,每个SM一个,或者说每个GPC拥有四个。
代号Cypress的AMD HD5000系列只有1个曲面细分单元(Tessellator)
代号Cypress的AMD HD5000系列是全球首款支持DirectX 11特效的GPU,它继承了R600架构高效的VLIW组织形式SIMD结构流处理器单元,又继承了RV770以来的RBE后端渲染单元改进,同时结合TSMC 40nm工艺,将性能和功耗完美匹配,但是在光环的背后,一直隐藏着AMD的忧虑,那就是作为Direct X11关键技术支撑的曲面细分单元。
最终我们看到,基于Fermi架构的GTX480产品,拥有15个曲面细分单元(Tessellator),而AMD的顶级单卡HD5870,只有1个曲面细分单元。同时从最高端的HD5870到最低端的HD5450芯片,曲面细分单元(Tessellator)的数量都只有一个,其运算能力只是有工作频率决定的。这是一种非常不合理的架构设计。AMD下一代“Southern Island”(中文名“南岛”)架构正在寻求这个层面的突破。#p#page_title#e#
● R600以来的着色器结构与资源追加
SIMD结构ALU单元用作GPU着色器从提出直到现在,已经在GPU设计中被沿用了10年。AMD所使用的SIMD结构流处理器,具有非常明显的优势就是执行全4D指令时简洁高效,对晶体管的需求量更小。
而NVIDIA为了达到MIMD流处理器设计,消耗了太多晶体管资源,同时促使NVIDIA大量花费晶体管的还有庞大的线程仲裁机制、端口、缓存和寄存器等等周边资源。NVIDIA为了TLP(线程并行度)付出了太多的代价,而这一切代价,都是为了GPU能更好地运行在各种复杂环境下。
但是业界普通的共识是SIMD结构的流处理器设计能够有效降低晶体管使用量,特别是在已经设计好的架构中扩展流处理器数量的难度,比起MIMD结构要容易很多。
对比R600和G80架构可知,4个1D标量ALU和1个4D矢量ALU的理论运算能力是相当的,但是前者需要4个指令发射端和4个控制单元,而后者只需要1个,如此一来MIMD架构所占用的晶体管数将远大于SIMD架构。
回顾AMD在统一渲染时代做出的努力,我们能够感觉到从R600到R800时代,AMD在试图通过不断堆砌SIMD结构的ALU运算器以提升性能,这是一个简单而粗暴的真理。由于R600-R800的US是分“1大4小”,即一个全功能SP单元和4个仅能执行乘加运算而无法执行连乘运算的部分功能SP。所以在上图测试的Float 5指令中,由于数据类型符合其流处理器结构,AMD的GPU设计发挥出了理论应有的最高性能。
R600为每个US配备了1个发射端,所以如果要保证指令吞吐不受限制就通过VLIW,也就是超长指令打包的形式将若干个短指令打包在一起。在US结构方面,从R600到R800几乎没有任何变化,我们所看到的性能提升,是因为周边资源放大之后R800比RV770或者说比R600更好的通过cache机制来掩盖延迟造成的损失。
RV870,基本上应该就是RV770+DX11强制的硬件IC(曲面细分单元),不仅R600的构架完全没变,而且其周边资源,尤其是Sram和寄存器资源理论上并没有得到本质性的强化。但是借由40nm工艺所带来的频率提升,以及长时间在RV770中的积累所带来的寄存器和Sram时序的调整以及调度模式的转变,HD5870获得了非常理想的性能提升。
要想改进AMD目前的流处理器结构,在HD6000系列中几乎已经没有可能,也就是说从某种程度上来讲,HD6000仍然基于HD2000以来的架构基础。特别是用VLIW技术所组织的流处理器结构这一点不会发生改变,因为AMD一旦转变设计方向,现在建立起来的一切性能领先优势可能不复存在。#p#page_title#e#
● 继续用固定硬件单元实现特殊功能
计算机体系结构的基本原理是,任何软件能够实现的,硬件都能够实现,相反也成立,这被成为硬件软件等效原理。这一原理只是功能等效,性能来说,良好优化和设计的硬件通常要比同样水平的软件快很多,同样,开发周期长,开发的成本,也要高不少,体系结构研究的重点就是从需要出发,寻求最佳的软硬件平衡点,在一定的成本约束下,获得最高的性能。
GPU中也是一样,在目前统一渲染成为主题的今天,统一渲染着色器(Unified Shader)和固定功能单元(Fixed Function)是配合的,当我们重点看SP规模的时候,其实GPU性能的很大程度是由固定功能单元来完成的。
从固定功能单元的发展历程来看,在一项新技术最初被提出时,一般厂商都希望使用一个特定的硬件IC去实现这项技术。而在这项技术经历一段时间之后,特定功能单元一般都会被大规模的可编程单元替代,尤其是在GPU的发展历程中非常普遍。
比如说当年的T&L技术最初是由特定硬件完成的,后来逐渐被替代。顶点、像素、几何三项着色工作在DirectX10出现之前也是由各自对应的着色器来负责的,但是统一渲染架构提出之后它们被统一渲染着色器替代。
Intel也知道这条道理,它认为固定渲染单元最终可以被Shader指令替换,Shader指令也可以由x86扩充指令替换。所以Larrabee简单而又庞大的架构运用而生。实际上整个IC设计领域都在实现“去功能化”这个方向,所有人都明白添加固定功能单元换取性能提升不是长久之计。
在5月28日我们对NVIDIA首席执行官黄仁勋先生的专访中,黄先生赞成不断增强曲面细分能力,但是这种能力的增强,依靠的是使用固定功能单元或者说特定硬件IC,实际上也就是曲面细分单元(Tessellator)。
黄仁勋先生向我们解释到,在考虑每瓦特性能的今天,追求性能的提升必须要衡量其他因素的影响以及控制这种影响,特别是用户最为关注的功耗问题。图形渲染能力(Rendering)和几何能力(Geometry)是目前GPU最为主要的两个发展方向,这两个方向所需要的硬件是不同的。
曲面细分性能或者说业界对曲面细分的依赖,再次造就出独立的Tessellation单元。当然虽然它不太符合通用处理单元的发展方向,但是如果计算晶体管的投入与性能回报,特定硬件实现Tessellation功能是目前最好的选择。所以黄仁勋先生坚持以增添特定硬件IC的方式来提升GPU几何处理能力。#p#page_title#e#
● AMD意识到RV870架构的不足
AMD下一代GPU代号为“Southern Island”,中文名为南岛。作为ATI即将发布的显示芯片,南岛有可能将在温哥华流片。ATI下一代GPU南岛系列名字在温哥华遭泄露。这些名字将由 Whistler-Blackcomb, Robson and Seymour为我们带来。这些名字自从南岛命名出来后就已经在暗地流传。当然以上关于芯片名称的解说大家只能参考,同时这也不是我们分析的重点。
“南岛”在发布之前,已经透露出了一些非常令人欣喜的特性。其中最为显著的就是增强了DirectX 11最为重要的曲面细分(Tessellation)性能。实际上2009年9月ATI全球首发了第一款DirectX 11显卡HD5870之后,其DirectX 11的支持力度和架构改进幅度一直是行业内关注的重点。
ATI公布的DirectX 11 Tessellation特性
本次“南岛”仍然没有更新R600以来的US结构,而目前我们所得到的“南岛”的DirectX 11性能将在相同规模流处理器下超越自家HD5000产品,据此我们推测“南岛”架构增强了Tessellation能力。
Tessellation又可译作拆嵌式细分曲面技术。其实这是ATI早在其第一代DirectX 10图形核心R600,即HD2900XT上就引入的一个特殊的计算模块。从HD2000系列开始,直到最新的HD5000系列,4代显卡全部支持这一技术。
其中HD2000到HD4000系列都是使用了ATI独有的硬件模块来支持这一技术。从DirectX 11开始,微软对这项技术进行了优化,使之能与渲染流程完美的结合在一起,可以更高效率的细分出更多的多边形和曲面。
上图就是AMD目前的顶级产品HD5870架构图(代号RV870),这张图片由ENET网站Cloud编辑绘制。我们可以看到在现在的RV870架构中,微软引入了可编程曲面细分管线。在最新Shader Model 5.0标准中,增加了Hull Shader、Compute Shader、Domain Shader三种新的Shade,它们的出现都是为了完善曲面细分管线,分别位于镶嵌器的前后。#p#page_title#e#
● “南岛”架构重点加强曲面细分
我们根据各方面的情报综合考虑,“Southern Island”(“南岛”)还是延续R600架构,但是把曲面细分单元(Tessellator)放在VLIW Core中,这是一次非常难得的改进。但同时这也是南岛的极限。因为要把固定功能单元要挂到VLIW Core中,就要有独立的总线连接、独立的资源、寄存器、端口,也就是说独立的线程仲裁分配能力。
在VLIW Core中实现独立仲裁分配能力,是AMD一直希望在GPU中做到的,如果能做到这一点,那AMD或许能够借此实现更深级别的乱序执行,这基本上就和NVIDIA站在同一起跑线。同时如果把曲面细分单元(Tessellator)放在VLIW Core中,曲面细分能力将伴随芯片规模而变化,高中低端显卡将拥有各自不同的曲面细分能力。这和NVIDIA将曲面细分单元(Tessellator)放在SM中是一个道理。
如果南岛无法一次性将曲面细分单元(Tessellator)放在VLIW Core中,可以选择另外一种途径,那就是对GPU内部单元进行分频。正如NVIDIA将CUDA Cores的频率以两倍于固定单元频率运行一样,AMD可以选择将几何性能较弱的Setup Engine和Tessellator等单元按一定幅度提升频率。
或者将GPU的前端超线程发送器(Ultra Threaded Dispatch Processor)整体频率提升,这样曲面细分单元自然也会受益,同时GPU的几何处理能力会得到线性增强。
但是也有一种说法认为AMD没有能力在HD6000芯片的VLIW Core级别中添加更多的essellator单元,因为线程仲裁能力背后的设计还很复杂,比如足够的挂起空间。仲裁器本身没多少晶体管,这种资源基本上都是LDS,寄存器也是。所以R800使用了抢占式多线程,但是速度和效率还是得不到保障。
另一种猜想已经被我们否定,那就是在现有的前端超线程发送器(Ultra Threaded Dispatch Processor)中添加一个曲面细分单元(Tessellator)。因为这需要两套独立的crossbar,以及在VLIW Core外设置独立的出口,最后还要设置抢占式多线程分配单元。
所以我们可能看到HD6000系列在流处理器规模与HD5000系列相同的情况下,在Direct X 10和Direct X 9性能方面落后于HD5000,但是由于几何能力的提升,在Direct X 11方面,会有较为出色的表现。这一点和Fermi架构的设计思路是非常接近的。#p#page_title#e#
● AMD南岛架构能否改善运算效率
Compute Shader技术是微软DirectX 11 API新加入的特性,在Compute Shader的帮助下,程序员可直接将GPU作为并行处理器加以利用,GPU将不仅具有3D渲染能力,也具有其他的运算能力,也就是我们说的GPGPU的概念和物理加速运算。多线程处理技术使游戏更好地利用系统的多个核心。
Computer Shader的初衷,就是使用通用计算的手段来进行后处理。由于GPU的浮点运算能力非常强大,支持GPU进行通用计算的技术发展势头很快,NVIDIA和AMD分别有CUDA和Stream技术,以前两家是各自为战,如今微软也看到了GPU通用计算的曙光,在DX11中加入了Compute Shader这一技术,意在统一当前的通用计算技术。你可以认为Compute Shader标准就是微软提出的OPEN CL。
关于A卡和N卡在OPEN CL计算方面的性能差异,很多媒体进行过测试,但大家实际上一直在找一个合适的平台,在找一套合适的测试基准程序。目前,首款国人开发的支持GPU的OpenCL通用计算测试程序OpenCL General Purpose Computing Benchmark (简称GPC BenchMark OCL)已经公开并且升级到1.1版本。中关村在线显卡频道决定使用这款软件,对AMD和NVIDIA的架构特性做一些对比,以测试它们在哪些环境中能发挥出更好的理论性能。
分析上图得到的测试数据我们可知,在纯吞吐环境中,AMD延续了R600架构以来的特性,其浮点吞吐量的优势得以体现。特别是浮点运算(单精度)测试中,HD5870压制了强大的Fermi架构GTX480。在密码学测试中,因为很少牵扯到计算层面,GPU只是不断随即生成数据然后去试探,所以A卡理论吞吐量高的特性再次得到体现。
但是只要涉及到常规数学方法测试,这种实际运算环境中将会包含大量跳转嵌套分支等指令,只有运算器组织得当的GPU,才能有效避免理论值的大幅度衰减。A卡因为其架构设计原因,大幅度落后于Fermi架构。
其中HD5870落后最为明显的图像处理,包括亮度直方图绘制、2维卷积(锐化)、快速非局部均值法降噪、图片缩放(双立方滤波)。这项测试主要考量GPU的全局存储器和纹理访问能力,同时局部存储器原子操作也占到一定比重,所以架构较新的Fermi系列产品表现优异。
Computer Shader里同样有大量的常规数学方法。只要和“常规数学方法”有所接触,A卡就会因为架构设计受到很大影响。其中矩阵,卷积,离散余弦和反余弦等用的相对比较多。
实际上超标量结构本身并没什么不好或者说落后,但是要让超标量兼顾吞吐和灵活性,外围的要求就高了。VLIW Cores必须加入更多资源和仲裁能力,晶体管数量会因此提高很多。
在上图中,图一表示了Compute Shader做图像后处理(Post Process),图片是《地铁2033》的游戏截图,利用Compute Shader技术做景深处理可以得到更好的效率。图二表示利用Compute Shader技术做IA人工智能。图三表示CUDA或者未来的Compute Shader结合OptiX技术做光线追踪。图四表示SPH流体模拟,流体的模拟,是典型的通用计算应用实例,对Shader性能要求较高。
Compute Shader可发挥的地方很多,游戏中可以使用GPU进行光线追踪、A-Buffer采样抗锯齿、物理特效、人工智能AI等游戏特效运算。在游戏之外,程序员也可以利用CS架构进行图像处理、后处理(Post Process)等。
在硬件支持Compute Shader之后,相应的硬件必须要比当代硬件更加灵活,因为在运行CS代码的时候,硬件必须支持随机读写、不规则列阵(而不是简单的流体或者固定大小的2D列阵)、多重输出、可根据程序员的需要直接调用个别或多个线程、32k大小的共享寄存空间和线程组管理系统、粒数据指令集、同步建构以及可执行无序IO运算的能力。
实际上AMD也看清了GPU未来发展的实质,首先在RV770中加入LDS存储器,然后在RV870中对LDS的可操作性的改进,以及shared Memory的扩展,都是面向通用计算设计的。或者说,是为了Compute Shader而不得不做的事情。
我们推测在即将发布的AMD下一代GPU也就是HD6000系列“Southern Island”(“南岛”)架构中,几何计算能力层面的突破可以依靠增加曲面细分单元(Tessellator)来实现,但是Compute Shader计算效率的提升的重任,将落在未来的架构身上。
无论如何,“南岛”将走出AMD改革的重要一步,如果能借助自从RV770以来在产品方面的转变,AMD或许能够用自己的思路来提升GPU的运算能力。
届时我们将看到GPU越来越通用化,其分支处理能力更加强大,运算精度不断提升。未来的CPU则越来越注重多线程能力,以此巩固自己在并行计算领域的优势,我们将在未来看到两种不同的芯片向自己所没有触及过的领域发展。