MCPLive > 杂志文章 > 没有想不到 趣味分析和预测GPU的发展

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

2012-01-05coolmusic《微型计算机》2011年12月上

在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的性能和效率则不够理想。

DirectX 10是现代GPU发展的一个重要分水岭,G80是第一款支持DirectX 10的GPU。
DirectX 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)。

多路SLI系统并不在本系统的考虑之内,集成显卡也由于不确定性比较大被排除在外。
多路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的单精度浮点能力,纵坐标是显卡的3DMark Vantage GPU成绩。需要注意的是,比例轴按照对数数列来排布,并非常见的等差数列。图中“三角形”形状(在下方的曲线上)的数据点代表AMD GPU,“正方形”形状的数据点(在上方的曲线上)代表 NVIDIA GPU。利用回归分析的方法,得到了两条相当漂亮的回归曲线。
该图的横坐标是GPU的单精度浮点能力,纵坐标是显卡的3DMark Vantage GPU成绩。需要注意的是,比例轴按照对数数列来排布,并非常见的等差数列。图中“三角形”形状(在下方的曲线上)的数据点代表AMD GPU,“正方形”形状的数据点(在上方的曲线上)代表 NVIDIA GPU。利用回归分析的方法,得到了两条相当漂亮的回归曲线。(图3)

分享到:

用户评论

用户名:

密码: