正文内容 评论(0

没有想不到 趣味分析和预测GPU的发展
2012-01-11 17:05:47  出处:   编辑:朝晖     评论(0)点击可以复制本篇文章的标题和链接

本文引自《微型计算机》

在GPU的发展中,我们已经看了太多的潮起潮落和大风大浪。那么,有没有想过利用数学的方法将其量化,并借此以判断GPU发展的速度和未来的情况呢?我们刚好在国外的real world technologies网站上(数月之前)看到一篇通过数学统计方法来研究GPU性能发展的趣味文章,该作者先通过一些和GPU性能相关的参数建立一个公式并得到相关数据,然后用实例去验证。我们不能保证这种方法一定是正确的,因为它并不是业界公认的定律,更无法准确代表GPU发展的趋势。但它作为一种有依据的推导方式还是有一定借鉴意义的,因此我们翻译并整理了该文章,下面我们来看看GPU的性能发展究竟是如何被“预测”的。

没有想不到 趣味分析和预测GPU的发展
预测GPU的性能发展的意义

从DirectX 10开始(图1),GPU硬件可编程性能大大提高。NVIDIA和AMD在设计中都开始注重GPU架构对可编程性的支持,而不再像早期的GPU那样:特定的硬件面向特定的功能。不过目前的软件尚不能很好地应用GPU的可编程特性,比如OpenCL依旧很难获得特别优秀的应用效率,在集成显卡中甚至刚刚才开始给予支持。即使如此,对于特定的计算,GPU仍拥有比CPU更优秀的峰值性能表现,特别是GPU的理论性能效率可以比CPU高2~4倍(以每瓦特性能或者每平方毫米性能计算)。当然,对于那些不适合的工作负载,比如较为复杂的分支预测、控制流、数据流等,GPU的性能和效率则不够理想。

没有想不到 趣味分析和预测GPU的发展
DX 10是现代GPU发展的一个重要分水岭,G80是第一款支持DirectX 10的GPU。(图1)

然而,现代GPU的结构非常复杂,影响因素众多,其性能表现也很难以捉摸。比如AMD的Cayman和NVIDIA的Fermi,使用了完全不同的核心设计方案,且还有uncore(非核心部分)部分的设计,包括显存的带宽、显存访问总量、数据吞吐量等。当然还有核心内部的缓存设计方案, 是否可读、可写、只读, 以及是否连贯等。此外,还有相当重要的内部总线设计,包括是否采用Crossbar(交叉总线)、Ring bus(环路总线)以及Hierarchical(层级总线)设计等。对一些一直以来就存在的固定功能管线,比如着色调度、纹理性能等,两家厂商的设计思路也都有明显差异。最后则是软件层面,NVIDIA多次宣称它的软件开发人员大于硬件开发人员——实际上驱动程序(可以理解为转为某类硬件设计的实时优化编译器)对用户体验GPU产品时的最终影响极大。

因此,了解GPU的性能将如何发展,尝试用数学方法来解释GPU发展的线路以及作出预测是相当有趣的。这样的预测,对那些非常关注GPU性能的用户和玩家来说,也是相当重要的,还可以大致看到未来GPU应用发展的范围。

建立一个简单的GPU性能模型

尽管困难重重,但利用数学方法来统计GPU性能以及预计未来发展也并非完全不可能。重点在于如何选择一个合适的角度,在可以衡量GPU性能的同时,又能有效地给出相应的数学统计方法。这就涉及到如何理解GPU架构本身,以及如何将性能和数学统计统一起来。从实际情况来看,预测性能和效率的关键在于如何辨别并分离那些能大幅度影响GPU性能的变量,并将其综合在一个可预测的模型中。在这里,笔者将建立一个简单的性能计算公式:

性能=内核数量/换算系数×频率×IPC/指令数目

在上述公式中,IPC是instruction per cycle,即每周期指令数量(作为一个底层性能参数,它的具体数据往往很难获得,笔者在后文用另外一个与其成正比的、易获得的单精度计算数据替代了它);内核数量是指流处理器数量;换算系数是一个数学常数,笔者将在后文给出它的数据;频率是指流处理器频率。这个模型实际并不复杂,它的理论依据是来自于很常用的衡量显卡基础性能的参数,比如频率、流处理器数量、指令数目等,实际上其他一些研究者所使用的更为复杂的模型还加入了有关工作负载以及一些底层硬件的信息。

举例来说,16bit的宽矢量指令能够很明显地减少运行程序时的指令数目。而一些复杂模型会显示IPC是如何被诸如GPU中的指令控制单元(如AMD的线程分发器)等类似设备所影响,或者还有研究人员加入了抗锯齿、各向异性过滤等不同程度的工作负载,甚至包含如动态频率控制等对性能的影响。

更复杂的模型能够在更精确的程度上给出预测情况,在本文中,笔者并没有使用这种特别庞大的数据模型,而是根据目前显卡基准硬件和架构情况,建立一个相对简单的AMD和NVIDIA GPU的数学模型。并最终给出一些粗略但能看出大致趋势的理论分析结果,而且会结合实际情况来分析和对比。

这个GPU模型怎么样?

为了证明这个模型的科学性和大致正确性,必须用大量当下主流GPU的运行基准测试数据来验证,并且还需要得到换算系数的具体数值。限于笔者的自身条件问题,基准性能数据多来自于移动GPU,但这并不影响最终的统计结果。

在统计中,笔者利用3DMark Vantage(分辨率为1280×1024,关闭了有关物理效果的部分),对120多款支持DirectX 10及以上API的独立显卡进行测试,并得到相应的成绩。该测试成绩并没有考虑集成显卡和多路显卡的配置方案(比如SLI、CrossFireX)。这是因为某种程度上,上述模型默认认为AMD和NVIDIA显卡的Shader Core数量、显存带宽、纹理单元以及ROP等是成比例增加的。这对独立显卡来说比较符合实际,但完全不符合集成显卡的情况。并且集成显卡的数据带宽特别小,这和多路显卡系统情况也类似,经常需要平衡带宽对性能的影响,也不太符合我们模型的计算结果。因此在一开始的模型里面就只考虑独立显卡,排除了集成显卡和多路显卡系统(图2)。

没有想不到 趣味分析和预测GPU的发展
多路SLI系统并不在本系统的考虑之内,集成显卡也由于不确定性比较大被排除在外。(图2)

笔者的目的很简单:用最简单的模型最直观地表达出GPU性能的发展趋势。尽管复杂模型看起来更好,精确度更高,但这个简单模型也能粗略估算出趋势。表面上看起来,利用3DMark Vantage这样的基准测试软件可以得到相当平衡的分数,但实际上这款软件成绩是建立在系统基础上的,很难得到底层的硬件性能(如果采用很底层的测试,又会和实际应用脱节),系统中的CPU、芯片组、BIOS、驱动程序版本甚至散热情况等软硬件配置都会影响最终成绩,因此这个统计略显粗糙。

不过好在图形工作负载在本质上是并行的,因此最终的测试成绩差不多和GPU的流处理器数量是成正比的。图形工作负载主要是单精度运算(一些中高端显卡的单精度计算能力可以在相应的技术白皮书中找到,但NVIDIA和AMD一般没有公布中低端显卡的数据),也有一些整数运算(双精度运算主要用于科学计算,因此不在统计中)。不过在实际的求证过程中,由于IPC和指令数的数据比较难获得,因此笔者最终决定使用单精度浮点性能来代替I PC和指令数等比较复杂的计算单精度计算能力实际上可以被分解为三个部分:Shader Core的数量、频率、每周期最大指令数量。这三个数据和显卡本身规格息息相关,也是上述模型的重要组成部分

使用单精度计算能力的优势在于,不考虑真正的IPC,也不考虑驱动因素。在测试中,NVIDIA的显卡主要基于G80、GT200、GF100以及GF104等核心,NVIDIA的GPU微架构一脉相承,性能也和Shader Core数量紧密相关。AMD方面则使用了较老的RV670和Cypress核心进行模型验证,而没有加入最新的Cayman核心。这是由于AMD的Cayman将传统的4D+1D(VLIW5)结构更新为4D(VLIW4),其核心效率有明显提高,不太符合模型预测的情况,因此将其排除在模型之外。除此之外,单精度计算能力忽略了显存带宽和一些固定功能硬件(比如DirectX 10显卡中的一些几何处理单元)对显卡性能的影响。

图3充分体现了简单变量带来的优势,NVIDIA和AMD的显卡基本上在一条直线附近,在回归分析中的确定性系数R2(用于衡量一个数值对另一个数值的影响程度,在这里意味着显卡的性能随着单精度计算能力的上升而均匀上升,也就是前文的换算系数)值相当接近1。这说明模型的预测结果相当不错,其基准分数和显卡的单精度计算能力(GFLOP/s)很接近,和回归曲线也较为吻合。这表示该模型可以通过统计简单的GPU的理论单精度浮点运算吞吐量,来解释很多问题。笔者的结论是:单精度的浮点计算能力是一个相当不错的GPU性能衡量工具

没有想不到 趣味分析和预测GPU的发展
该图的横坐标是GPU的单精度浮点能力,纵坐标是显卡的3DMark Vantage GPU成绩。需要注意的是,比例轴按照对数数列来排布,并非常见的等差数列。图中“三角形”形状(在下方的曲线上)的数据点代表AMD GPU,“正方形”形状的数据点(在上方的曲线上)代表 NVIDIA GPU。利用回归分析的方法,得到了两条相当漂亮的回归曲线。(图3)

分析结果 验证成绩

图3中的回归曲线的斜率表示通过换算,能从理论的单精度计算能力来推测显卡的实际性能,利用这些信息以及显卡本身已知的单精度浮点性能,笔者可以大概推测出其它类似架构的GPU性能。根据图3,NVIDIA显卡的单精度浮点性能和3DMark Vantage GPU成绩的换算系数大概是14.14,AMD的大约是6.31,这也是两条回归曲线的实际斜率数值。斜率意义重大,如果这个模型是准确的话,只要将显卡的单精度浮点性能除以斜率,就大概知道显卡的3DMark Vantage GPU测试成绩。

为了评估这两条预测曲线的精度, 笔者将模型与几个用于桌面GPU实际的性能进行比较。不过在原始数据中,有关桌面GPU的信息很少,因此导致在选择显卡并进行对比时, 受到了比较大的局限。不过最终还是找到了7个可以用于比较的数据, 其中五个数据来自NVIDIA,另外两个数据来自AMD。从表1来看,图3的回归曲线的精确度还是很高的。尤其是在NVIDIA的GPU上,绝大多数的NVIDIA GPU产品的误差范围都在3%以内,最大误差出现在GeForce GTX 460,达到了+7%,意味着其性能表现比预计的更好。但是在AMD产品中,回归曲线出现了一定的预测误差,例如Radeon HD 5850的误差在-6%左右,而Radeon HD 4850则达到了-15%左右。由于模型比较简单,这样的结果还是可以接受的。

表1:性能统计

显卡名称

单精度浮

点能力

预测性能

实际性能

GeForce GTX 580

1581

22351

23179

-3.57%

GeForce GTX 570

1405

19867

20620

-3.64%

GeForce GTX 470

1089

15390

15189

1.32%

GeForce GTX 460

907

12825

11994

6.93%

Radeon HD 5850

2088

13171

14028

-6.11%

Radeon HD 4850

1000

6308

7436

-15.17%

用户也可以根据斜率来进一步使用单精度浮点性能,来预测任意GPU的3DMark Vantage GPU分数(必须是DirectX 10的显卡),然后和实际的3DMark Vantage GPU分数进行对比,并比较误差。下面是两个计算公式:

NVIDIA显卡的3DMark Vantage GPU分数=GPU单精度浮点性能×14.14

AMD显卡的3DMark VantageGPU分数=GPU单精度浮点性能×6.31

由于该模型的预测结果不错,接下来笔者会进一步进行一些处理,将文章开篇的模型公式重新变化、调整,并加入峰值性能的概念后,得到下列公式:

图形性能=流处理器数量×频率×IPC/指令数目=峰值单精度浮点性能×斜率

将这个公式变化一下,又可以得到两个公式,分别是:

IPC/指令数目=峰值IPC×斜率

斜率=IPC/(峰值IPC×指令数目)=有效核心数量/指令数

经过公式的转换和变形后,从最终斜率来看(图5、图6),可以得到AMD和NVIDIA在GPU内核架构设计上的差异性。一般说来,GPU的峰值单精度浮点速度是由Shader Core的数量乘以频率再乘以IPC峰值得到的,峰值和实际效能的差距则代表了AMD和NVIDIA在驱动设计和架构设计方面的差距和不同——NVIDIA回归曲线的斜率大约是AMD的2.2倍,这意味着NVIDIA架构的效率也达到了AMD架构的2.2倍。请注意,这只是理论上的,并非表示在实际游戏中也有这样的差异。或许这也从侧面证明了为什么AMD要对传统的VLIW 5架构作出重大调整(变更为VLIW4),并最终将其抛弃开发了全新的GCN。

数学模型还能做什么?

通过数据对比可以发现,3DMark Vantage性能和单精度浮点性能实际上能够很好地代表GPU微架构的性能。本文的两条回归曲线展示了GPU发展中大致应该达到的性能方向,如果要预测未来几年的GPU发展情况,在架构没有特别巨大改动的情况下,直接延伸曲线就能得到未来GPU的性能。不过众所周知的是,AMD下一代产品将改变架构,但NVIDIA的“开普勒”应该还会延续目前的Fermi架构,因此NVIDIA的斜率可以较为准确地预测未来“开普勒”架构下那些“正常”产品的性能结果(不包含过度阉割,如显存频率、位宽、GPU频率的产品)。而对于AMD下一代产品(GCN)来说,目前的斜率可能无法较为精确地预测性能。

当然,回归曲线的结果还可以得到另外一个结论,那就是目前市场上大部分GPU的周边配置——包括为每款GPU配置的显存位宽、驱动程序、频率等,都为GPU本身的性能作出了优化,否则很难有如此相当完整的曲线出现。而一些离曲线较远或者偏差较大的产品,无法准确推测出原因,因为笔者的模型较为简单,涉及的参数并不多。但是可以确定的是,这类距离曲线较远的产品要么性价比特别高,性能出色,要么就是由于显存位宽和频率等问题,导致性能不佳,不值得购买

同理,你还可以建立某类其他测试和单精度浮点性能之间的关系,唯一需要关注的是这些不同的负载或许将表示GPU在不同类型应用下的性能。3DMark Vantage和3DMark 11的侧重点就不一样,而一些专业的软件如SPECviewperf这样使用OpenGL的软件又会带来更多样化的结果(图4)。

没有想不到 趣味分析和预测GPU的发展
不同的基准软件会带来不同的预测趋势结果,玩家可以建立自己的预测模型并利用回归曲线来分析。比如使用较新的3DMark 11来考察有关DirectX 11的应用。(图4)

进一步扩展后,测试模型也可以用来比较不同微架构产品以及架构调整是如何影响GPU性能的。举例来说,对AMD的Cayman来说,随着大量测试数据的出现,可以建立一个不错的模型,用于和上代甚至下一代的GPU产品进行对比,从而从图形上明确展示出这些微架构的不同。NVIDIA方面,它的数据显得更为“整齐”一些,显示出NVIDIA在GPU方面良好的发展规划和架构潜力。

显存带宽和GPU性能的关系

下面,我们来看看显存带宽和GPU性能的关系。从图5和图6来看,虽然AMD显卡的数据点的分散度比较高,但相比之下,NVIDIA显卡的偏离更为奇怪一些。这意味着,单精度浮点性能往往并不意味着更高的性能。比如AMD的某两款产品,GPU本身单精度计算性能高达432GFLOP/s和422GFLOP/s,相当接近,但最终的3DMark Vantage成绩前者只有2552分,而后者却有3463分,性能提高了36%。这种情况在NVIDIA显卡上显得更为普遍,三款显卡都拥有理论192GFLOP/s的吞吐量,但性能分别是3700分、3374分和2527分,最大差距达到了46%。

没有想不到 趣味分析和预测GPU的发展

没有想不到 趣味分析和预测GPU的发展
这是AMD和NVIDIA显卡的3DMark Vantage GPU性能以及单精度浮点性能的散点图,已经画好了回归曲线,并且这两张图的坐标轴采用了等差数列,比较符合观察习惯。(图6)

实际上出现这样的原因还是因为GPU的架构造成的。以AMD Cayman为例,流处理器阵列只是GPU的一个基本架构,但其它的一些组件如纹理缓存、采样设计、ROP单元以及显存控制器等固定功能单元(也依赖驱动软件优化)也在显著影响着系统性能。在这些设备中,对GPU系统影响最大的还是显存控制器以及相应的显存颗粒。3D图形计算需要高速的显存速度来满足数据传输的需求,因此目前的高端GPU都使用了经过优化过的、专为图形系统设计的GDDR5颗粒来满足对带宽的需求,更便宜的GDDR3或者DDR3已经无法达到要求了。除此之外,ROP单元往往和显存控制器有关系,因此显存带宽的性能也会涉及到类似ROP这样的固定功能硬件。因此,在这种情况下,我们必须加入对显存带宽的考虑,需要进一步分析来得到一个初步结果。

表2是15款移动版GPU的详细信息,不过这并不影响分析结果。从表中可以看到,这些数据中涉及了DirectX版本、流处理器数量、频率、显存带宽、显存位宽、3DMark测试成绩等多个数据。笔者将拥有相近的理论单精度浮点性能的显卡分为一组,每组显卡的的最终成绩和显存带宽并不相同。其次,从数据可以看出,显存带宽对GPU的性能实际上起着比较重要的作用。比如AMD的Radeon HD 3870和Radeon HD 4670,前者的显存带宽达到了后者的2.12倍,而性能也是后者的136%。

没有想不到 趣味分析和预测GPU的发展
表2:15款显卡的详细信息

NVIDIA显卡的情况也比较类似,但显存对NVIDIA显卡的影响比AMD显卡更为显著。比如GeForce 9800M GTS、GeForce GTS 160M和GeForce GT 420M,这三款显卡的理论单精度浮点性能是一样的,都是192GFLOP/s,但由于显存带宽的差异,256bit显存位宽的两款显卡比128bit显卡的性能分别提高了33%和46%。另外一组对比结果也显示,200%的显存带宽能够带来45%的性能提高。这些都显示了GPU核心对显存带宽的渴求度依旧没有彻底满足,显存带宽仍然是GPU性能的瓶颈。不过在低端的GeForce GT 335M和GeForce GT 4200M上,显存带宽增加了接近300%的时候,性能才提升了40%,显然GeForce GT 335M虽然有很高的带宽,但并没有获得与此匹配的GPU性能。这说明,中高端显卡对显存速度的需求更高,相反,中低端产品并不需要特别高的显存速度,这是由GPU核心的性能所决定的。

从上述数据可以看出,显存带宽的增加或者减少能够解释之前性能模型中出现的一些问题。笔者的数据表也证明了显存带宽和GPU性能没有线性关系,性能比例的提升完全决定于GPU架构的性质、性能以及工作负载。对于非常需要显存负载的架构或者那些被显存带宽约束的GPU,提升显存带宽会得到相当明显的性能增幅,反之则并不会有特别明显的结果,甚至可能造成浪费资源。这在实际游戏中表现可能会更为明显一些,对程序设计人员来说,积极利用GPU的缓存也可以降低GPU对显存带宽的需求。根据笔者的分析和前面的一些统计数据,在大部分情况下,提升一倍显存带宽,大约可以带来30%的性能提升

简单公式,不简单结果

在本文中,笔者利用了一个非常简单的数学模型以及回归分析方法,为GPU建立了一个数学统计模型,并得到了利用单精度浮点性能来粗略估计GPU性能的方法。虽然模型简单甚至粗糙,但实际结果表现却还不错。最后,笔者还对另一个影响GPU性能的重要因素——显存带宽进行了单独讨论,也带来了一些比较有实际意义的结果。

实际上,本文的核心重点并非在于指导GPU的未来发展,甚至预测GPU的发展方向。它的意义在于,给出了一种数学方法,指导大家特别是普通玩家如何利用数学来有效构建模型,并建立自己的GPU研究数据库,难度不算高。

责任编辑:

  • 支持打赏
  • 支持0

  • 反对

  • 打赏

文章价值打分

当前文章打分0 分,共有0人打分
  • 分享好友:
  • |
本文收录在
#快讯

  • 热门文章
  • 换一波

  • 好物推荐
  • 换一波

  • 关注我们

  • 微博

    微博:快科技官方

    快科技官方微博
  • 今日头条

    今日头条:快科技

    带来硬件软件、手机数码最快资讯!
  • 抖音

    抖音:kkjcn

    科技快讯、手机开箱、产品体验、应用推荐...