图拉丁吧 关注:7,698,406贴子:129,422,064
  • 10回复贴,共1

图形与计算那些事:AMD GCN架构历史解析,N卡缠绵的故事

取消只看楼主收藏回复

逼 我们不撕 不撕,赶快搬好凳子听故事了


1楼2015-01-23 15:39回复
    Radeon是一款好显卡,但不是颗好GPU
    作为显卡来说,AMD的Radeon自HD4000时代以来为游戏玩家提供了众多优秀的产品,HD5000/HD6000系列丝毫不输给NVIDIA同级产品,性能、功能、价格、功耗等各方面表现得都很不错。对于AMD下代HD7000系列,我们毫不怀疑它在3D游戏中会有更出色的表现。
    但作为GPU来说,AMD的产品显然要逊色很多,不支持物理加速、Stream通用计算性能不如CUDA,支持GPU加速的软件也屈指可数,这已经成为AMD最大的软肋,并且成了NVIDIA和NFan们攻击的对象。

    随着时间的推移,保守的AMD终于尝到了固步自封的苦果:当NVIDIA的CUDA计算课程进入高校学堂、Tesla杀进超级计算市场、Quadro拿下95%的专业卡市场份额之时,AMD的Radeon还只能游弋在3D游戏领域,苦守来之不易的半壁江山。
    想当年AMD率先提出GPU通用计算的概念,但最终却在NVIDIA的CUDA手中发扬光大。很多人以为这是AMD收购ATI后自顾不暇的关系,其实根本 原因还在于GPU的架构——传统基于3D图形处理的GPU不适合于进行大规模并行计算,AMD的GPU拥有恐怖的理论运算能力却无从释放。而NVIDIA 则从G80时代完成了华丽的转身,逐步完善了硬件和软件的协同工作,使得GPU成为高性能计算必不可少的配件。


    2楼2015-01-23 15:40
    收起回复

      俗话说的好:苦海无涯、回头是岸,亡羊补牢、为时不晚。AMD终于在代号为Southern Islands(南方群岛)的新一代GPU中,启用的全新的架构,AMD称之为“Graphics Core Next”(GCN,次世代图形核心),并冠以革命性的称号。这是AMD收购ATI之后的近5年来第一次对GPU架构进行“伤筋动骨”的“手术”,而架构 调整的核心内容则是为并行计算优化设计。
      那AMD的“次世代图形核心”相比沿用了五年之久的架构到底有何改进?其并行计算性能相比对手NVIDIA有无优势?3D游戏性能会否受到影响呢?本文将 为大家做一个全方位的解析,文中会穿插一些3D渲染原理以及显卡基础知识,并谈谈GPU图形与计算的那些事儿……
      成也微软败也微软:XBOX360阻碍显卡/游戏发展
      微软的DirectX 9.0C是一个神奇的图形API,自2004年首款DX9C显卡GeForce 6800 Ultra问世以来,至今已有将近8年时间,之后虽然微软发布了DX10、DX10.1、DX11、还有现在的DX11.1等多个新版本,但DX9C游戏 依然是绝对主流,DX10以后的游戏全部加起来也不过几十款而已!
      因此,当年的DX9C显卡之战,很大程度上决定了此后很多年的显卡研发策略。从最开始X800不支持DX9C对抗6800失利,到X1800支持DX9C 却性能不济,再到X1900登上顶峰,还有半路杀出来XBOX360这个程咬金,ATI被AMD收购前的经历犹如过山车般惊险刺激!

      DXC如此长寿的原因,相信游戏玩家们已经猜到了,那就是游戏主机太长寿了——微软XBOX360以及后来索尼PS3使用的GPU都是DX9C时代的产 品。游戏开发商的主要盈利来源在主机平台,所以根本没心思把PC游戏做好,尤其对提高PC游戏的画面及引擎优化提不起兴趣,个别以高画质而著称的PC游戏 倍受打击,很多DX10游戏续作倒退到DX9C就是很好的证明。
      可以说,这么多年来PC 3D游戏图形产业的发展,成也微软、败也微软。


      3楼2015-01-23 15:41
      收起回复

        XBOX360的GPU——Xenos,由ATI设计

        Xenos的核心架构图
        微软XBOX360的成功,给GPU供应商ATI发出了一个信号,那就是今后N年内的游戏都将基于XBOX360的硬件而开发。当时ATI与Xenos同 时研发的一颗GPU代号为R580,俩者拥有相似的架构,而R580在当年也成为DX9C显卡的王者,这就让ATI更加坚定了维持现有架构不变的决心。
        从X1900XTX谈起:用3:1黄金架构做计算
        下面我们就来看看R580的核心架构,也就是当年的王者X1900XTX/X1950XTX所使用的GPU,后来次高端RV570核心(X1950Pro)的架构也类似。

        R580:8个顶点着色单元、48个像素着色单元、16个纹理单元
        DX9C显卡还没有统一渲染架构的概念(XBOX360的Xenos是个特例),所以R580依然是顶点与像素分离式的设计。当时的GPU核心部分被称为 管线,比如7800GTX拥有24条像素渲染管线,但X1900XTX却不能称为拥有48条像素渲染管线,因为它的像素与纹理单元数量不对等。
        GPU的工作原理:

        显卡的渲染流程是通过顶点单元构建模型骨架,纹理单元处理纹理贴图,像素单元处理光影特效,光栅单元负责最终的像素输出。


        4楼2015-01-23 15:41
        回复
          HD2900XT走向不归路:超长指令集的弊端
          R520->R580的成功,多达48个着色单元功不可没,这让ATI对庞大的ALU运算单元深信不疑。ATI认为只要继续扩充着色单元,就能满足新一代DX10及Shader Model 3.0的要求。
          着色单元的结构:
          在图形处理中,最常见的像素都是由RGB(红黄蓝)三种颜色构成的,加上它们共有的信息说明(Alpha),总共是4个通道。而顶点数据一般是由XYZW 四个坐标构成,这样也是4个通道。在3D图形进行渲染时,其实就是改变RGBA四个通道或者XYZW四个坐标的数值。为了一次性处理1个完整的像素渲染或 几何转换,GPU的像素着色单元和顶点着色单元从一开始就被设计成为同时具备4次运算能力的运算器(ALU)。

          数据的基本单元是Scalar(标量),就是指一个单独的值,GPU的ALU进行一次这种变量操作,被称做1D标量。由于传统GPU的ALU在一个时钟周期可以同时执行4次这样的并行运算,所以ALU的操作被称做4D Vector(矢量)操作。一个矢量就是N个标量,一般来说绝大多数图形指令中N=4。所以,GPU的ALU指令发射端只有一个,但却可以同时运算4个通 道的数据,这就是SIMD(Single Instruction Multiple Data,单指令多数据流)架构。
          R580的Shader单元结构
          显然,SIMD架构能够有效提升GPU的矢量处理性能,由于VS和PS的绝大部分运算都是4D Vector,它只需要一个指令端口就能在单周期内完成4倍运算量,效率达到100%。但是4D SIMD架构一旦遇到1D标量指令时,效率就会下降到原来的1/4,3/4的模块被完全浪费。为了缓解这个问题,ATI和NVIDIA在进入DX9时代后相继采用混合型设计,比如R300就采用了3D+1D的架构,允许Co-issue操作(矢量指令和标量指令可以并行执行),NV40以后的GPU支持 2D+2D和3D+1D两种模式,虽然很大程度上缓解了标量指令执行效率低下的问题,但依然无法最大限度的发挥ALU运算能力,尤其是一旦遇上分支预测的 情况,SIMD在矢量处理方面高效能的优势将会被损失殆尽。
          DX10时代,混合型指令以及分支预测的情况更加频繁,传统的Shader结构必须做相应的改进以适应需求。NVIDIA的做法是将4D ALU全部打散,使用了MIMD(Multi Instruction Multiple Data,多指令多数据流),而AMD则继续沿用SIMD架构,但对Shader微架构进行了调整,称为超标量架构。
          R600的5D超标量流处理器架构:

          作为ATI的首款DX10 GPU,架构上还是有不少改进的,DX10统一渲染架构的引入,让传统的像素渲染单元和顶点渲染单元合二为一,统称为流处理器。R600总共拥有64个 Shader单元,每个Shader内部有5个ALU,这样总计就是320个流处理器。


          6楼2015-01-23 15:42
          回复
            RV870核心架构图
            把RV870与RV770的架构图放一起的话,可以发现其外围周边模块几乎完全相同,而流处理器部分是一分为二的设计,其中的一半正好就是RV770的规格。
            除了加入DX11、ShaderModel 5.0的支持,赋予Eyefinity 6屏输出的功能外,RV870与RV770相比并没有本质改进。
            既然流处理器部分还是维持R600的设计,那就不用期待它在并行计算方面能有什么改进。AMD依然我行我素的在搞通用计算,支持的软件还是那么几款。 RV870理论浮点运算能力再创新高,但却没什么人用,中国最强的超级计算机天河一号曾经使用的是HD4870X2,但后来升级成天河一号A之后改用了NVIDIA的Tesla,就是活生生的例子。
            HD6870的一小步:双超线程分配处理器
            也许有人会问,如此暴力的扩充流处理器规模而不更改架构,R600架构会成为AMD的常青树吗?难道不会有什么瓶颈吗?当然会有,AMD也发现了,所以从 HD6000系列开始又进行了一轮架构的微调,透过AMD架构微调这一结果,我们可以了解出现问题原因到底是什么?
            HD6870的一小步:两个超线程分配处理器
            Barts核心的HD6870率先问世,这颗核心定位中端,所以流处理器从Cypress的1600个精简到了1120个,流处理器结构依然没有任何变化,但是前端控制模块一分为二:

            相信大家应该注意到了,以往AMD的SIMD架构则是整颗GPU共享单一的控制单元,自R600以来都是如此。
            Cypress的单一图形装配引擎
            但随着晶体管规模和流处理器数量的迅速膨胀,单一的控制单元已经无法满足大规模并行指令分配的需要,因此从Cypress开始,AMD采用了“双核心”的设计,将SIMD阵列一分为二,也就是类似于NVIDIA GPC的设计。与此相对应的,图形装配引擎虽然只有一个,内部却设计了两个Hierarchical Z(分层消影器)和Rasterizer(光栅器),但是其它的特殊功能模块均只有一个。
            Barts和Cypress一样,依然保持了双核心设计,图形引擎也只有一个,内部的功能模块并没有太多变化。但是Ultra-Treaded Dispatch Processor(超线程分配处理器)却变成了两个,相对应的,超线程分配处理器的指令缓存也变成了两份。
            Barts的图形装配引擎
            我们知道,Barts的流处理器数量是Cypress的70%,按理说线程分配压力有所下降,那么设计两个线程分配处理器的目的只有一个,那就是提升效率。在DX11时代,几何着色再加上曲面细分单元引入之后,图形装配引擎会产生更多的并行线程及指令转交SIMD进行处理,因此指令派发效率成为了新的瓶 颈。
            SIMD架构的优势就是可以用较少的晶体管制造成庞大的流处理器规模,拥有恐怖的理论运算能力;但缺点就是流处理器执行效率比MIMD架构低,其效率高低完全依赖于分配单元的派发效率。因此Barts这种双线程分配处理器的设计意义重大。


            8楼2015-01-23 15:42
            回复
              有针对性的强化曲面细分单元
              单从数量上来看,Tahiti明显不如GF100的4个光栅化引擎(光栅器+分层消影器)以及8个多形体引擎(几何/顶点分配器及曲面细分单元等)。不过 AMD有针对性的强化了曲面细分单元,通过提高顶点的复用率、增强片外缓存命中率、以及更大参数高速缓存的配合下,HD7970在所有级别的曲面细分环境 下都可以达到4倍于HD6970的性能:

              此前我们介绍过,HD6970的曲面细分性能是HD6870的两倍、HD5870的三倍。通过AMD的理论数据来看,Tahiti的曲面细分性能应该达到甚至超越了GF100/110。
              看得出来,AMD的Tahiti在图形引擎方面依然沿用Cayman的设计,从Cypress到Barts再到Cayman,AMD稳扎稳打的对图形引擎 进行优化与改进,AMD认为现有的双图形引擎设计足以满足流处理器的需要,因此只对备受诟病的曲面细分模块进行了改良,如此有针对性的设计算是亡羊补牢、为时不晚。
              GCN架构的精髓:流处理器完全重新设计
              看了上页图形引擎部分的介绍,很多人可能会失望——基本没动嘛,还说什么次世代图形核心?别着急,好戏在后头。我们知道AMD历代GPU的瓶颈除了曲面细 分以外,其实最重要的是5D/4D VLIW架构的效率问题。现在Tahiti的GCN架构就是要解决这个问题,它的流处理器结构已经面目全非了。
              Tahiti彻底抛弃VLIW架构

              通过Tahiti的整体架构图我们看到,传统的SIMD流处理器阵列消失了,取而代之的是GCN阵列,Tahiti总计拥有2048个流处理器,这样每个GCN阵列里面拥有64个流处理器。现在来看看GCN阵列的微观结构。
              GCN与GF100的SM何其相似
              Tahiti的GCN阵列微观结构
              GCN阵列里有4组SIMD单元,每组SIMD单元里面包括16个流处理器、或者说是标量运算器。GCN架构已经完全抛弃了此前5D/4D流处理器 VLIW超长指令架构的限制,不存在5D/4D指令打包-派发-解包的问题,所有流处理器以16个为一组SIMD阵列完成指令调度。简单来说,以往是指令 集并行,而现在是线程级并行。
              GF100的SM(流处理器簇)微观结构
              可以这么理解,一个GCN阵列与GF100当中的一组SM相当,GF100的一组SM当中有4组共计32个流处理器,而Tahiti的一组GCN当中有4组共计64个流处理器。
              缓存部分
              每个SIMD-16单元都拥有64KB向量寄存器
              每组GCN阵列拥有64KB的本地数据共享缓存,还有16KB的一级缓存
              每组GCN阵列有一个标量运算单元,用于执行整数指令、媒体指令和浮点原子操作,这个标量运算单元拥有自己的4KB寄存器
              而GF100的缓存设计得更加灵活,每组SM里面拥有总计64KB的共享缓存+一级缓存,这64KB缓存可以根据实际运算量来动态调整,如果把16KB分配给一级缓存的话,那剩下的48KB就是共享缓存,反之亦然。
              一般来说,进行图形渲染时需要共享缓存比较多,而并行计算时则会用到更多的一级缓存。GF100这种灵活的缓存分配机制更适合做并行计算,而GCN架构更大的共享缓存会有更好的图形渲染性能,并行计算则会稍逊一筹。


              14楼2015-01-23 16:06
              回复
                基友们 你们有什么想说的


                17楼2015-01-23 16:08
                回复
                  总结就是,群众的眼光是雪亮的!N家gts450以后,A家7系以后可买,小道消息可能支持DX12


                  22楼2015-01-23 16:53
                  回复
                    是之前看过的,有开普勒,特斯拉资料么,找篇呗


                    来自Android客户端47楼2015-01-23 23:01
                    回复
                      楼主出来辟谣 楼上的不是我的小号


                      57楼2015-06-03 09:36
                      回复