能耗比的陷阱

    能耗比是这两年在圈子里出现最多的一个概念了,无论是厂商还是玩家都在能耗比上展开攻防战,撕得不亦乐乎。

01

能耗比的水有多深?

能耗比是性能功耗比的简称,也就是性能除以功耗。可见,能耗比这个概念非常的浅显易懂,具备作为一种广泛比较指标的基础。但是能耗比这个看似简单的指标下水是非常深的。一知半解的人很容易误解,甚至被别有用心的人带节奏。
要解释为什么能耗比为什么水深,我们得从如下几个方面来看:
  1. 什么是性能?什么是功耗?
  2. 性能和功耗什么关系?
简单来说,能耗比的水深就深在它的概念也很简单、计算公式虽然很简单,但是每一项(性能、功耗)是什么却是一个难以被定义的概念。我们一一说起。
02

什么是性能?什么是功耗?

     在不加限定的情况下,无论是性能还是功耗都是一个没有办法被具体量化的指标。因为芯片和软件都是一个复杂的系统,这两个指标都会因场景而异,不存在A比B性能恒定高50%,或者功耗恒定低50%的情况。最简单的一个例子,A15对比A14的性能提升,在不同的测试中都是不一样的,那么究竟谁能代表性能呢?
     所以一般当我们说起性能或者功耗数值的时候,一定是有特定条件、有具体参照的。可以是SPEC的平均性能(功耗)/Geekbench的平均性能(功耗),可以是XXX的,可以是任意组合的加权…..但无论怎么说,都一定是有一个计算标准的。
        那么,问题就出现了。前面我们说到了性能或者功耗的表现是因场景而定的,那么理论上当我们基于特定标准计算了性能和能耗比后,其只能反映该标准下的性能和能耗比,而不能准确反映其它场景下的表现。比如,CineBench R20下测试的功耗和性能,只能准确说明R20下的能耗比,只能用于参考和R20类似场景的表现,但是一旦推开到所有场景,那显然是非常不准确不严谨的。
 
     在实际测试中,我们当然不可能遍历每一种场景去为每一个产品计算一个准确的能耗比。为了权衡可参考性和准确性,我们应当尽可能地多选择一些有代表性的测试场景,或者综合性的计算套件,然后计算一个能耗比。比如说,大家都觉得Geekbench玩具,但Geekbench比CineBench这种参考性可大多了。
     但很不幸的是,现在的这个圈子里就喜欢把一个偏科项目的测试捧到神坛上,甚至还有人说功耗和测试是分开不同测试的,功耗用Stress FPU,性能用XX跑分那种。反正你只要知道,功耗和性能都是因场景而定的,就知道这些做法多么不靠谱了。
    不知道这种趋势的出现是傻、是懒还是坏,但是总结起来这里可以做手脚的地方就是以点概面~
03

性能和功耗是什么关系?

 
    比起在功耗和性能是什么上做文章,现在在能耗比曲线上做文章的更多。
    功耗和性能呈现什么关系,稍微懂一点的人应该都会知道,那就是同样的芯片提升性能(超频)后,功耗会有更大幅度的上升,进而导致能耗比的下降。比如当我们粗略地仅看动态功耗时(这里不严谨,但足够说明问题了,详细的后续章节写),性能和频率基本正比,功耗不但和频率正比,也和电压二次方比。
    芯片的动态功耗是晶体管开关造成的,开关的速度决定频率是多少,而能开关多快则由电压决定。因此,功耗这里的电压其实和频率是高度相关的。大体上电压和频率的关系接近线性,所以能耗比又可以看成是:
     
    我们稍微简化一下,消解一下分子分母的频率,可以得到下式。这里的IPC和常数都是常数,所以可以看到能耗比实际上和频率2次方呈现负相关(ps,实际不一定是2次方,可高可低,但一般远大于1,后续文章再解释,这里这么理解就可以。):
     所以,我们可以看到对于一个固定的产品,它的能耗比它也不是恒定的,不同性能下它的能耗比都不一样。那么不难得知,当对比两个不同产品的能耗比时,即便事先公平确定了用什么算功耗和性能,但是怎么选择对比能耗比也会影响结果,比如说下面三种情况计算得到的能耗比差距都会不一样:1)A和B一样性能下比;2)A和B一样功耗下比;3)A和B一样频率下比;4)A和B默认设置下比。
      每一种计算能耗比的方式都是对的,但是都不具备足够的参考性。所以,总结起来,这里动手脚的方式也还是以点概面~
      这时候有人应该想到了画功耗-性能曲线来比较了,这个看着非常公平。但是这个其实也是有很多手脚可以做的,最明显的可动手脚的就是就是刚刚说的性能和功耗是什么?其次,还有更多的手脚可动….

作者:极客石头

在搞事情的路上越走越远。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注