Kirin9000思考:GPU的边际效应和规模的代价
我在前一篇,Kirin9000的文稿中提到了:增加GPU的规模,其一个隐性的代价是大幅度的GPU规模但是回报的性能提升(能耗比提升)幅度却相对有限,这会使得GPU的性价比降低。
但是,代价其实并不止这些。我希望读者或者观众,能够明确意识到:世界上绝大部分的事,包括这里堆GPU规模,都具有其两面性。不存在一个没有代价没有取舍的方案,有的是只有方案的最适问题。当讨论一个方案时,必须要全面的去看待它,尽管作为厂商,他会引导消费者从一个局部的,更加对他有利的角度去看待它。无论是片面的引导诸如底大一级压死人,更大光带宽的色彩滤镜(RYYB等),更快的充电功率,更大的电池等等。你不能否认他们的优势,但是不仅仅要认识到其优势的“幅度”,更加要深刻的意识到他们的“代价”。
厂商之间的军备竞赛未必是对用户有利的,在物理规则的极限下的以局部的(或者说片面的)视角的竞争,甚至对用户的实际使用是不利的。这背后实际上是产品发展到达极限之后,厂商为了竞争和营销卖点的行为:在我看来,如今的手机行业已经和当年iphone横空出世之前的按键手机并没有什么两样。
当然,在这里我只是希望能够意识到方案的取舍问题。
GPU的规模增加究竟是为了什么
GPU的规模增加,就如我前面的说到的。在通常散热限制下的最大功耗时,通常GPU至少不会运行在一个偏低的频率。此时GPU的能耗比实际上处于一个较低的位置,降低运行频率虽然会进入一个能耗比更高的状态,但是性能和功耗的降低最后就表现来看就是:性能变差了。
既然散热阈值限制了总体的功耗(需要注意的是散热阈值是一个更加复杂的概念),所以如果我需要在撑满散热阈值的功耗下,要实际提高性能,我就可以选择让GPU运行在更低同时能耗比更高的频率,同时用增加的规模带来的功耗,去填满冗余的功耗阈值。
于是这个问题实际上相关的问题是:频率和能耗比的关系。
功耗=性能/能耗比
这个问题就变成了不同频率下的能耗比。这个关系决定了堆GPU规模的性能表现。
但是GPU再到CPU等等,并不是总是频率越低能耗比越高的。它存在一个能耗比最高的频率。如果堆栈规模到功耗阈值下,运行到低于这个频率,最终性能是反而有损失的。
这意味着,堆GPU核心数的最大极限性能提升比是这样的:
能耗比最高的频率处的能耗比/当前频率处的能耗比=极限提升幅度
GPU堆规模并不是一个可以无限提升的方案,而是存在一个明确的最大极限的:越逼近这个极限,边际效应越大。
实际问题还不止在于边际效应,我可以拿出来Adreno530举个栗子
这是Adreno530在运行GFXBench T-Rex的频率—能耗比曲线,可以看到,其峰值在320MHz处附近。这意味着Adreno500无论怎么增加规模,在电气性能无法改善的情况下,在阈值的功耗处,最大只能再提高62.4%的性能。
于是接下来,对频率-能耗比曲线做一个足够逼近的函数(灰线),用于绘制曲线。计算给Adreno530增加规模之后的性能-功耗曲线:
可以看到:1.当把Adreno530堆到3倍(增加2倍)的规模时,性能达到几乎极限。超过这个大小,实际性能发生了损失。2.随着GPU的规模增加,性能功耗曲线越平坦,其功耗对于性能变化就越不敏感。
可以看到,当你把adreno530的GPU规模翻倍之后,大约在Adreno530的69%性能处,或者翻倍的Adreno530的50%性能处以上,更大的GPU的能耗比是更高的。但是低于此性能范围时,规模更小的Adreno530有明显的能耗比优势,此时这个更小的GPU,同性能功耗更低。
当然,性能更强的GPU意味着带宽瓶颈越大,会有更多的GPU资源处于空载,实际表现的能耗比损失会更大。所以如果考虑真实的翻倍的Adreno530,实际的表现的瓶颈损失会更大。
我们现实使用中的GPU负载环境是复杂的。当普通的手机使用时,其负载极低,GPU几乎运行在最低频率。此时规模更大的GPU,只会功耗更大,因其功耗对性能变化并不敏感,基础功耗就偏高。
而通常的普通3D手游,通常本身资源消耗就不大,加上有垂直同步。实际上是限制了负载程度的情况,此时视情况,这俩GPU未必谁能比谁真的存在能耗比优势。
最后只有真正的高GPU负载,没有垂直同步或者帧率根本跑不上垂直同步,此时,更大规模的GPU才能展现出绝对的优势。
显然,更大规模的GPU是存在取舍的,最终权衡的是究竟应当专注于高性能高负载下的能耗表现,还是日常使用的情况。显然并不存在一个两全其美的方案。
当然,该说还是要说,更大的GPU规格是性能的基础,无论如何,作为一个旗舰产品,他就是要展现出强大的性能的,显然在此时,低负载下的环境其实并不是厂商更加会侧重的问题。说到底,不会有人觉得一个峰值下表现不好的产品会是一个旗舰产品。这其实更像是一个用户的期待值的问题。
后注
其实,我也有Adreno530的Manhattan 3.1的数据。但是其能耗比对频率没那么敏感,所以为了体现差距,选择了T-Rex的数据。
如果空载程度较高,根据空载比例主动关闭部分“GPU核”,同时让频率尽量接近性能功耗比最佳的频率点。只在真满载的时候才全开并允许频率大幅高过最佳频率点。
如果允许这样的调度的话,曲线应该会怎样呢?
能耗比表现在图标上是与原点的连线的斜率。如果能保证所有负载在最优能耗比处,那么就会是一条斜率=能耗比倒数的直线。不过这个问题不仅仅是调度的问题,如果真想要实现可能还是直接再加个省电GPU两个来回切换直接(
本文大的结论是正确的:堆核有上限。即便按照100MHz的频率来堆核也有上限。但是这个上限在哪里就不好说了,高通GPU “低频多核” 架构的性能上限肯定不是3.5x 附近。
简单的用GPU当前产品的曲线来推测规模提升后的效果是不逻辑的。没有任何一个手机GPU 会简单的堆核,堆核之后都要对性能带宽瓶颈做优化。这样GPU的“体质” 就变了,这条现有的性能 功耗比曲线也就不再准确了。事实上GPU厂商都在持续对现有架构进行优化,这条曲线是非常动态的。
另外厂家对GPU的轻载场景的功耗其实不是特别关心,这点功耗没有优化的空间,G78MP24的轻载功耗绝对值也不大,所以轻载场景能耗比没有意义,消费者日常使用也没有损失。只有重载场景的能耗比才有搞头。 在重载场景下,如果SOC有面积预算,那优雅的降频堆核都是有能效比收益的。