}MU}-6 zt,Tda4Y 在GPU的发展中,我们已经看了太多的潮起潮落和大风大浪。
那么,有没有想过利用数学的方法将其量化,并借此以判断GPU发展的速度和未来的情况呢?我们刚好在国外的real world technologies网站上(数月之前)看到一篇通过数学统计方法来研究GPU性能发展的趣味文章,该作者先通过一些和GPU性能相关的参数建立一个公式并得到相关数据,然后用实例去验证。我们不能保证这种方法一定是正确的,因为它并不是业界公认的定律,更无法准确代表GPU发展的趋势。但它作为一种有依据的推导方式还是有一定借鉴意义的,因此我们翻译并整理了该文章,下面我们来看看GPU的性能发展究竟是如何被“预测”的。
tFj[>_d7 hv.33l cl\Gh uO]^vP]fT 预测GPU的性能发展的意义
+`jI z'+ Q5K<ECoPk 从DirectX 10开始(图1),GPU硬件可编程性能大大提高。NVIDIA和AMD在设计中都开始注重GPU架构对可编程性的支持,而不再像早期的GPU那样:特定的硬件面向特定的功能。不过目前的软件尚不能很好地应用GPU的可编程特性,比如OpenCL依旧很难获得特别优秀的应用效率,在集成显卡中甚至刚刚才开始给予支持。即使如此,对于特定的计算,GPU仍拥有比CPU更优秀的峰值性能表现,特别是GPU的理论性能效率可以比CPU高2~4倍(以每瓦特性能或者每平方毫米性能计算)。当然,对于那些不适合的工作负载,比如较为复杂的分支预测、控制流、数据流等,GPU的性能和效率则不够理想。
MZPXI{G d;:H#F+ ( s}1S6*Cr [l`_2{: DX 10是现代GPU发展的一个重要分水岭,G80是第一款支持DirectX 10的GPU。(图1)
t 0 omJP {:@MBA34 然而,现代GPU的结构非常复杂,影响因素众多,其性能表现也很难以捉摸。比如AMD的Cayman和NVIDIA的Fermi,使用了完全不同的核心设计方案,且还有uncore(非核心部分)部分的设计,包括显存的带宽、显存访问总量、数据吞吐量等。当然还有核心内部的缓存设计方案, 是否可读、可写、只读, 以及是否连贯等。此外,还有相当重要的内部总线设计,包括是否采用Crossbar(交叉总线)、Ring bus(环路总线)以及Hierarchical(层级总线)设计等。对一些一直以来就存在的固定功能管线,比如着色调度、纹理性能等,两家厂商的设计思路也都有明显差异。最后则是软件层面,NVIDIA多次宣称它的软件开发人员大于硬件开发人员——实际上驱动程序(可以理解为转为某类硬件设计的实时优化编译器)对用户体验GPU产品时的最终影响极大。
p*LG Y+ TK! D=M 因此,了解GPU的性能将如何发展,尝试用数学方法来解释GPU发展的线路以及作出预测是相当有趣的。这样的预测,对那些非常关注GPU性能的用户和玩家来说,也是相当重要的,还可以大致看到未来GPU应用发展的范围。 O4c[,Uq8~ }^b7x;O| 建立一个简单的GPU性能模型 ng0tNifZ; bh
Nqj 尽管困难重重,但利用数学方法来统计GPU性能以及预计未来发展也并非完全不可能。重点在于如何选择一个合适的角度,在可以衡量GPU性能的同时,又能有效地给出相应的数学统计方法。这就涉及到如何理解GPU架构本身,以及如何将性能和数学统计统一起来。从实际情况来看,预测性能和效率的关键在于如何辨别并分离那些能大幅度影响GPU性能的变量,并将其综合在一个可预测的模型中。在这里,笔者将建立一个简单的性能计算公式:
h=a-~= 8 ?@@BIg- 性能=内核数量/换算系数×频率×IPC/指令数目 UgqfO( BI|BfO%F$j 在上述公式中,
IPC是instruction per cycle,即每周期指令数量(作为一个底层性能参数,它的具体数据往往很难获得,笔者在后文用另外一个与其成正比的、易获得的单精度计算数据替代了它);内核数量是指流处理器数量;换算系数是一个数学常数,笔者将在后文给出它的数据;频率是指流处理器频率。这个模型实际并不复杂,它的理论依据是来自于很常用的衡量显卡基础性能的参数,比如频率、流处理器数量、指令数目等,实际上其他一些研究者所使用的更为复杂的模型还加入了有关工作负载以及一些底层硬件的信息。
dGc<{sQzB }piDg(D 举例来说,16bit的宽矢量指令能够很明显地减少运行程序时的指令数目。而一些复杂模型会显示IPC是如何被诸如GPU中的指令控制单元(如AMD的线程分发器)等类似设备所影响,或者还有研究人员加入了抗锯齿、各向异性过滤等不同程度的工作负载,甚至包含如动态频率控制等对性能的影响。
?^X
e^1( NP+*L|-; 更复杂的模型能够在更精确的程度上给出预测情况,在本文中,笔者并没有使用这种特别庞大的数据模型,而是根据目前显卡基准硬件和架构情况,建立一个相对简单的AMD和NVIDIA GPU的数学模型。并最终给出一些粗略但能看出大致趋势的理论分析结果,而且会结合实际情况来分析和对比。
<