@Ol(:{< 'fl.&"/r 在GPU的发展中,我们已经看了太多的潮起潮落和大风大浪。
那么,有没有想过利用数学的方法将其量化,并借此以判断GPU发展的速度和未来的情况呢?我们刚好在国外的real world technologies网站上(数月之前)看到一篇通过数学统计方法来研究GPU性能发展的趣味文章,该作者先通过一些和GPU性能相关的参数建立一个公式并得到相关数据,然后用实例去验证。我们不能保证这种方法一定是正确的,因为它并不是业界公认的定律,更无法准确代表GPU发展的趋势。但它作为一种有依据的推导方式还是有一定借鉴意义的,因此我们翻译并整理了该文章,下面我们来看看GPU的性能发展究竟是如何被“预测”的。
.xwskzJ3 E,tdn#_| "~r)_Ko &-qQF`7 预测GPU的性能发展的意义
ms5?^kS2O w!H(zjv&( 从DirectX 10开始(图1),GPU硬件可编程性能大大提高。NVIDIA和AMD在设计中都开始注重GPU架构对可编程性的支持,而不再像早期的GPU那样:特定的硬件面向特定的功能。不过目前的软件尚不能很好地应用GPU的可编程特性,比如OpenCL依旧很难获得特别优秀的应用效率,在集成显卡中甚至刚刚才开始给予支持。即使如此,对于特定的计算,GPU仍拥有比CPU更优秀的峰值性能表现,特别是GPU的理论性能效率可以比CPU高2~4倍(以每瓦特性能或者每平方毫米性能计算)。当然,对于那些不适合的工作负载,比如较为复杂的分支预测、控制流、数据流等,GPU的性能和效率则不够理想。
JDR_k VO eVS&} ;PC! izcaWt3 a DX 10是现代GPU发展的一个重要分水岭,G80是第一款支持DirectX 10的GPU。(图1)
-t S\ l3p :}A 然而,现代GPU的结构非常复杂,影响因素众多,其性能表现也很难以捉摸。比如AMD的Cayman和NVIDIA的Fermi,使用了完全不同的核心设计方案,且还有uncore(非核心部分)部分的设计,包括显存的带宽、显存访问总量、数据吞吐量等。当然还有核心内部的缓存设计方案, 是否可读、可写、只读, 以及是否连贯等。此外,还有相当重要的内部总线设计,包括是否采用Crossbar(交叉总线)、Ring bus(环路总线)以及Hierarchical(层级总线)设计等。对一些一直以来就存在的固定功能管线,比如着色调度、纹理性能等,两家厂商的设计思路也都有明显差异。最后则是软件层面,NVIDIA多次宣称它的软件开发人员大于硬件开发人员——实际上驱动程序(可以理解为转为某类硬件设计的实时优化编译器)对用户体验GPU产品时的最终影响极大。
NW5OLa")J< 6 /YJA* 因此,了解GPU的性能将如何发展,尝试用数学方法来解释GPU发展的线路以及作出预测是相当有趣的。这样的预测,对那些非常关注GPU性能的用户和玩家来说,也是相当重要的,还可以大致看到未来GPU应用发展的范围。 3%5YUG@ Ws|`E`6O 建立一个简单的GPU性能模型 .e0)@}Jv8> {aUTTEu 尽管困难重重,但利用数学方法来统计GPU性能以及预计未来发展也并非完全不可能。重点在于如何选择一个合适的角度,在可以衡量GPU性能的同时,又能有效地给出相应的数学统计方法。这就涉及到如何理解GPU架构本身,以及如何将性能和数学统计统一起来。从实际情况来看,预测性能和效率的关键在于如何辨别并分离那些能大幅度影响GPU性能的变量,并将其综合在一个可预测的模型中。在这里,笔者将建立一个简单的性能计算公式:
Dh8'og)7 +={K -g7U 性能=内核数量/换算系数×频率×IPC/指令数目 Kw`CN #at`7#K@ 在上述公式中,
IPC是instruction per cycle,即每周期指令数量(作为一个底层性能参数,它的具体数据往往很难获得,笔者在后文用另外一个与其成正比的、易获得的单精度计算数据替代了它);内核数量是指流处理器数量;换算系数是一个数学常数,笔者将在后文给出它的数据;频率是指流处理器频率。这个模型实际并不复杂,它的理论依据是来自于很常用的衡量显卡基础性能的参数,比如频率、流处理器数量、指令数目等,实际上其他一些研究者所使用的更为复杂的模型还加入了有关工作负载以及一些底层硬件的信息。
4zS0kk;+ $O*@Jg= 举例来说,16bit的宽矢量指令能够很明显地减少运行程序时的指令数目。而一些复杂模型会显示IPC是如何被诸如GPU中的指令控制单元(如AMD的线程分发器)等类似设备所影响,或者还有研究人员加入了抗锯齿、各向异性过滤等不同程度的工作负载,甚至包含如动态频率控制等对性能的影响。
Jf?6y~X>Y sq`Xz8u 更复杂的模型能够在更精确的程度上给出预测情况,在本文中,笔者并没有使用这种特别庞大的数据模型,而是根据目前显卡基准硬件和架构情况,建立一个相对简单的AMD和NVIDIA GPU的数学模型。并最终给出一些粗略但能看出大致趋势的理论分析结果,而且会结合实际情况来分析和对比。
KWY_eY_| V>T?'GbS 这个GPU模型怎么样? nI]EfHU 8lpAe0p(Z 为了证明这个模型的科学性和大致正确性,必须用大量当下主流GPU的运行基准测试数据来验证,并且还需要得到换算系数的具体数值。限于笔者的自身条件问题,基准性能数据多来自于移动GPU,但这并不影响最终的统计结果。
_Z[0:4 PhC3F4 在统计中,
笔者利用3DMark Vantage(分辨率为1280×1024,关闭了有关物理效果的部分),对120多款支持DirectX 10及以上API的独立显卡进行测试,并得到相应的成绩。该测试成绩并没有考虑集成显卡和多路显卡的配置方案(比如SLI、CrossFireX)。这是因为某种程度上,上述模型默认认为AMD和NVIDIA显卡的Shader Core数量、显存带宽、纹理单元以及ROP等是成比例增加的。这对独立显卡来说比较符合实际,但完全不符合集成显卡的情况。并且集成显卡的数据带宽特别小,这和多路显卡系统情况也类似,经常需要平衡带宽对性能的影响,也不太符合我们模型的计算结果。
因此在一开始的模型里面就只考虑独立显卡,排除了集成显卡和多路显卡系统(图2)。
KL=<s#
Cty#|6k -:ucp2 $!>.h*np 多路SLI系统并不在本系统的考虑之内,集成显卡也由于不确定性比较大被排除在外。(图2)
.c-a$39 Z,#H\1v3lB 笔者的目的很简单:
用最简单的模型最直观地表达出GPU性能的发展趋势。尽管复杂模型看起来更好,精确度更高,但这个简单模型也能粗略估算出趋势。表面上看起来,利用3DMark Vantage这样的基准测试软件可以得到相当平衡的分数,但实际上这款软件成绩是建立在系统基础上的,很难得到底层的硬件性能(如果采用很底层的测试,又会和实际应用脱节),系统中的CPU、芯片组、BIOS、驱动程序版本甚至散热情况等软硬件配置都会影响最终成绩,因此这个统计略显粗糙。
klJ21j0Bb2 ia'z9 不过好在图形工作负载在本质上是并行的,因此最终的测试成绩差不多和GPU的流处理器数量是成正比的。图形工作负载主要是单精度运算(一些中高端显卡的单精度计算能力可以在相应的技术白皮书中找到,但NVIDIA和AMD一般没有公布中低端显卡的数据),也有一些整数运算(双精度运算主要用于科学计算,因此不在统计中)。
不过在实际的求证过程中,由于IPC和指令数的数据比较难获得,因此笔者最终决定使用单精度浮点性能来代替I PC和指令数等比较复杂的计算。
单精度计算能力实际上可以被分解为三个部分:Shader Core的数量、频率、每周期最大指令数量。这三个数据和显卡本身规格息息相关,也是上述模型的重要组成部分。
fYUV[Gm JnsJ]_< 使用单精度计算能力的优势在于,不考虑真正的IPC,也不考虑驱动因素。在测试中,NVIDIA的显卡主要基于G80、GT200、GF100以及GF104等核心,NVIDIA的GPU微架构一脉相承,性能也和Shader Core数量紧密相关。AMD方面则使用了较老的RV670和Cypress核心进行模型验证,而没有加入最新的Cayman核心。这是由于AMD的Cayman将传统的4D+1D(VLIW5)结构更新为4D(VLIW4),其核心效率有明显提高,不太符合模型预测的情况,因此将其排除在模型之外。除此之外,单精度计算能力忽略了显存带宽和一些固定功能硬件(比如DirectX 10显卡中的一些几何处理单元)对显卡性能的影响。
6"Fn$ :l? RA[j=RxK 图3充分体现了简单变量带来的优势,NVIDIA和AMD的显卡基本上在一条直线附近,在回归分析中的确定性系数R2(用于衡量一个数值对另一个数值的影响程度,在这里意味着显卡的性能随着单精度计算能力的上升而均匀上升,也就是前文的换算系数)值相当接近1。这说明模型的预测结果相当不错,其基准分数和显卡的单精度计算能力(GFLOP/s)很接近,和回归曲线也较为吻合。这表示该模型可以通过统计简单的GPU的理论单精度浮点运算吞吐量,来解释很多问题。笔者的结论是:
单精度的浮点计算能力是一个相当不错的GPU性能衡量工具。
uem-fTG nU_O|l9 pjFO0h_Y VQla.Y 该图的横坐标是GPU的单精度浮点能力,纵坐标是显卡的3DMark Vantage GPU成绩。需要注意的是,比例轴按照对数数列来排布,并非常见的等差数列。图中“三角形”形状(在下方的曲线上)的数据点代表AMD GPU,“正方形”形状的数据点(在上方的曲线上)代表 NVIDIA GPU。利用回归分析的方法,得到了两条相当漂亮的回归曲线。(图3)
z/{X{+Z (*$bTI/~ 分析结果 验证成绩 r+FEgSDa] )cJ>&g4] 图3中的回归曲线的斜率表示通过换算,能从理论的单精度计算能力来推测显卡的实际性能,利用这些信息以及显卡本身已知的单精度浮点性能,笔者可以大概推测出其它类似架构的GPU性能。根据图3,
NVIDIA显卡的单精度浮点性能和3DMark Vantage GPU成绩的换算系数大概是14.14,AMD的大约是6.31,这也是两条回归曲线的实际斜率数值。斜率意义重大,如果这个模型是准确的话,只要将显卡的单精度浮点性能除以斜率,就大概知道显卡的3DMark Vantage GPU测试成绩。
;yJ:W8U]+; !CYC7HeF 为了评估这两条预测曲线的精度, 笔者将模型与几个用于桌面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%左右。由于模型比较简单,这样的结果还是可以接受的。
: ZrJL& *XTd9E^tXq 用户也可以根据斜率来进一步使用单精度浮点性能,来预测任意GPU的3DMark Vantage GPU分数(必须是DirectX 10的显卡),然后和实际的3DMark Vantage GPU分数进行对比,并比较误差。下面是两个计算公式:
a<G&}|6 q;'f3Y NVIDIA显卡的3DMark Vantage GPU分数=GPU单精度浮点性能×14.14 kMQ
/9~ B`}um;T#~, AMD显卡的3DMark VantageGPU分数=GPU单精度浮点性能×6.31 h+g\tYWGP Ki;SONSV~| 由于该模型的预测结果不错,接下来笔者会进一步进行一些处理,将文章开篇的模型公式重新变化、调整,并加入峰值性能的概念后,得到下列公式:
92DM1~
* I$7eiW @ 图形性能=流处理器数量×频率×IPC/指令数目=峰值单精度浮点性能×斜率 -@#w) $"kPzo~B_ 将这个公式变化一下,又可以得到两个公式,分别是:
MoIh=rw D!&(#Vl
_ IPC/指令数目=峰值IPC×斜率 k]@]a IO+]^nY` 斜率=IPC/(峰值IPC×指令数目)=有效核心数量/指令数 6z 9
'|;,4 GI% &.V d 经过公式的转换和变形后,从最终斜率来看(图5、图6),可以得到AMD和NVIDIA在GPU内核架构设计上的差异性。一般说来,GPU的峰值单精度浮点速度是由Shader Core的数量乘以频率再乘以IPC峰值得到的,峰值和实际效能的差距则代表了AMD和NVIDIA在驱动设计和架构设计方面的差距和不同——NVIDIA回归曲线的斜率大约是AMD的2.2倍,这意味着NVIDIA架构的效率也达到了AMD架构的2.2倍。请注意,这只是理论上的,并非表示在实际游戏中也有这样的差异。
或许这也从侧面证明了为什么AMD要对传统的VLIW 5架构作出重大调整(变更为VLIW4),并最终将其抛弃开发了全新的GCN。 WUYI1Ij; [C "\]LiX 数学模型还能做什么? 9"P|Csj 79h~w{IT@ 通过数据对比可以发现,
3DMark Vantage性能和单精度浮点性能实际上能够很好地代表GPU微架构的性能。本文的两条回归曲线展示了GPU发展中大致应该达到的性能方向,如果要预测未来几年的GPU发展情况,在架构没有特别巨大改动的情况下,直接延伸曲线就能得到未来GPU的性能。不过众所周知的是,AMD下一代产品将改变架构,但NVIDIA的“开普勒”应该还会延续目前的Fermi架构,因此NVIDIA的斜率可以较为准确地预测未来“开普勒”架构下那些“正常”产品的性能结果(不包含过度阉割,如显存频率、位宽、GPU频率的产品)。而对于AMD下一代产品(GCN)来说,目前的斜率可能无法较为精确地预测性能。
]Ox5F@ !
xCo{U= 当然,回归曲线的结果还可以得到另外一个结论,那就是目前市场上大部分GPU的周边配置——包括为每款GPU配置的显存位宽、驱动程序、频率等,都为GPU本身的性能作出了优化,否则很难有如此相当完整的曲线出现。而一些离曲线较远或者偏差较大的产品,无法准确推测出原因,因为笔者的模型较为简单,涉及的参数并不多。
但是可以确定的是,这类距离曲线较远的产品要么性价比特别高,性能出色,要么就是由于显存位宽和频率等问题,导致性能不佳,不值得购买。
r`O
Yq ?%s>a8w 同理,你还可以建立某类其他测试和单精度浮点性能之间的关系,唯一需要关注的是这些不同的负载或许将表示GPU在不同类型应用下的性能。3DMark Vantage和3DMark 11的侧重点就不一样,而一些专业的软件如SPECviewperf这样使用OpenGL的软件又会带来更多样化的结果(图4)。
\fA{ sehdL 3'4+3Xo 8+F5n! ot^p xun 不同的基准软件会带来不同的预测趋势结果,玩家可以建立自己的预测模型并利用回归曲线来分析。比如使用较新的3DMark 11来考察有关DirectX 11的应用。(图4)
`S
{&gl