搜档网
当前位置:搜档网 › CPU功耗测量

CPU功耗测量

CPU功耗测量
CPU功耗测量

关于CPU功耗的问题讨论,绝对比IT人士专业

Re 这条微博:https://www.sodocs.net/doc/573742126.html,/1886211194/z0TrzsJuX

最近实在空,看到又有人在玩x86 vs arm功耗性能的比较,再上一段简单的功耗科普把。(看完可能需要10分钟)

既然又提到了功耗比较(从功耗还可以延伸到性能功耗比、效率等其他指标),有必要再次提醒一下功耗比较的一些前提,说是再次提醒,因为其实很多人都知道这个问题,但是在使用中又往往不经意间忽略这个问题,这里我顺手多写一点资料,希望大家记忆更深刻一点。只是博客聊聊,详细数据我就不去考证了,权作概念解释吧。

核心问题是:CPU的功耗指标是一笔糊涂账,CPU在运行不同的软件时所花费的功耗是不一样的。

那么,倒底怎么标称功耗指标呢?每家公司的功耗值又是怎么测量得出的呢?

大家知道比较多的,Intel一直用TDP功耗数据来标称CPU功耗。所谓TDP,英文全称Thermal Design Power,直译就是散热设计功耗,意思是系统设计中必须具备的散热能力值。也就是说Intel告诉给他的客户,我的CPU可能的发热量(即功耗)最大会达到这个数值。因此Intel给出的功耗数据是极端上限值,是CPU在极大满负荷运转下的耗电。我估计如果谁测到比Intel标称值大的功耗情况,应该可以向Intel去索赔的。

而在CPU IP行业中,因为各种条件的限制和制约(比如IP交付时还根本不知道具体的工艺实现),大家约定俗成使用另外的功耗测量手段,不光是ARM,MIPS也一样,其他CPU IP公司也一样。就是找一个比较常见的程序跑一下,然后报这个情况下的功耗数据。很多年来,不成文的规矩,行内大家都用Dhrystone来作为这个测试软件。

这个可怜的Dhrystone,就这样一边被大家骂、一边被众人用,它的最新版本2.1也是1988年的事情了,显然连作者都失去了维护它的兴趣,奇怪它还是那么长命,可见惯性的力量!

回到功耗的话题,这里既然谈Intel和ARM的功耗,就拿ARM来说吧。ARM所有的标称功耗值,都是指:

(1)内核在运行Dhrystone程序过程中的平均功耗;

(2)除非特殊说明,测量是在电脑仿真环境下进行的(因为ARM不卖芯片、也没有芯片)。

这样的功耗数据跟实际芯片和系统下面的真实功耗应该是有比较大差距的;明显的一点是,既然运行的程序不一样,功耗肯定不一样。那问题是,一般情况下,实际功耗是比ARM 标称值大还是小呢?

这一点我不敢下绝对的结论,只能说一句,一般情况下,实际功耗会比标称功耗大!引起功耗变化的原因有很多,比如(但不完全):

(1)不同ARM芯片的物理实现基本是不一样的(从前端约束到后端设计到工艺制程),即使同一个内核,不同家的芯片之间功耗表现也会相差很多;

(2)Dhrystone属于一个较“轻”的程序(也是为什么被批评不适合于作为现代CPU 的测试向量),Dhrystone对CPU的负载压力不大,自然使得相应功耗也偏小;

(3)特别地,Dhrystone自身的指令和数据量太小,基本上在L1 cache里面就装下了,因此运行过程中CPU基本不需要跟内存之间有吞吐交互,没有覆盖到这一点,无论从性能测试还是功耗测试上,都是一个极大的缺失。我们知道CPU跟内存之间的交互,早已是现代CPU的性能瓶颈,也是能量的一大消耗。

不过这样的功耗数据,并非ARM有意美化其低功耗的名声,实际上MIPS和其他同行也都是这么做的,在各自材料中也应该都是用小字体有标注说明,哈哈。作为一种“参考”指标,这并没有问题,不过大家应该记住,这只是一种相对的“参考”指标,不是绝对值。因此在使用时要注意。Dhrystone测试给CPU的压力比多数实际应用场景要小。

一般在实际系统中,芯片公司不太给出单独CPU的功耗数值,确实其意义也不大,都有芯片了,你关心整个芯片的功耗就是了。在很多的测评报告中,直接把ARM官网的性能和功耗数值套用在比如Tegra这样的芯片上面,这是非常不对的,无论功耗还是性能,ARM 给出的仿真数据和一个芯片的实际数据会有一定差别的。比如A9性能的官方标称是2.5 DMIPS/MHz,据我所知,现在还没有一款A9芯片,可以真实达到2.5 DMIPS/MHz的成绩,2.3是到现在为止我看到过最高的实测分数了。原因有点类似于功耗测量中的问题,DMIPS/MHz恰恰也是这个Dhrystone测试向量干的事情。在Dhrystone测试下面,高分低能是很常见的现象——指DMIPS/MHz跑很高分,而实际处理器性能表现一般。关于Dhrystone 有两个问题大家需要注意:

(1)Dhrystone自身的设计缺陷;

(2)欺骗性优化。

已经有很多小文章讲述Dhrystone的缺点了,主要的大致有以下几点:

(1)Dhrystone只涵盖有限的整数运算和字符串处理,这显然对现代CPU的测试是很不全面的,甚至可以说非常不足,从技术角度来看,它早早早就该被淘汰了;

(2)Dhrystone的体量太小,程序大概只有10KB出头一点,数据大概也是10KB左右,当前处理器的L1 cache配置装下它绰绰有余,完全没有测试到CPU的内存系统,L2都没有碰到。

所谓欺骗性优化,是因为Dhrystone本身就是一段开源的代码,没有任何独立第三方设置和认证测试方法和结果,各家都是自说自话。这样一来,在把源代码编译成可执行代码的过程中,有无数的小花招来美化Dhrystone测试结果。抛开库函数代码方面的trick不谈,光在编译器上面,一个现代的RISC编译器可能有几十上百个优化组合,同一段代码用不同的优化倾向编译下来,某个指标很可能差上50%。比如同一个CPU内核,用不同的优化,其DMIPS/MHz是可能差上50%的。通常情况下,Dhrystone使用过程中一个不成文的惯例是可

以用一些优化选项,但是不能用得太多(细节不表)。所以说,同一家公司里面对自己产品系列的测试成绩,其相对性应该是有比较价值的,而不同公司产品之间的比较就很怪异了,因为很可能很多比较的前提条件并不一致。

因此,一个真正科学的比较,应该拿实际的硬件平台,用相同的测试向量来进行直接PK。但是这样比较难以办到。

另外最后一个观点,功耗指标本身也并不是十分合适,用能量或效率才比较科学;不过同样的原因,因为功耗数据比较容易获得,又比较直观,又比较有群众基础,所以就比较流行。功耗和能量的观点(power vs. energy)相信大家也容易理解。功耗指标低的处理器,如果效率不佳,完成一项计算的时间过长,那么从能量角度而言它就不是真正的“低功耗”。跟性能测试中的欺骗性优化类似,片面的功耗测试中也存在欺骗性优化的空间,最后这个图给大家show一个比较极端的欺骗性低功耗优化例子,希望不要恶心到大家:

A肯定比B高效省电,但是只看功耗指标的话,很不幸,B比A好看。

一篇文章下来,抨击了“低功耗”,似乎帮Intel说了不少好话,不过实在帮不上他们在mobile市场上的表现。在一个具体应用中,能量效率固然重要,不过总功耗又是另外一条红线。Intel,go go 加油。

相关主题