cpu功耗与什么有关,cpu功耗大有什么坏处
chanong
|很久以前,有人邀请我并问了我以下问题:
CPU功耗跟它有什么关系?为什么while(1);完全霸占CPU功耗?
这个问题看起来有点傻,但事实并非如此。 while(1)可以使CPU的某些逻辑核心占用达到100%,但不能使所有核心都100%占用,更不能让CPU达到TDP。
在我回答他并开玩笑说他愚蠢天真的之前,我想知道:while(1)消耗了多少CPU功率?这些功率到哪里去了?如果你仔细思考这个问题,你会发现其中有很多相关的知识。特别是在当今世界,每瓦功耗被认为很重要,在了解原理后考虑节能方法是很自然的。
在这篇文章中,我们将详细讨论CPU能耗的基本原理、涉及到什么以及其他问题。
CPU能耗的基本原理:简单地将CPU视为场效应晶体管(FET)的集合。很多FET 每次翻转都会消耗能量。 FET 的简单原理图如下所示。
假设当输入较低时,CL 充电并且焦耳电能存储在电容器中。当输入为高电平时,释放电能,释放1焦耳的能量。由于CL很小,所以这个a也很小,几乎可以忽略不计。但如果这个FET在1GHz的频率下反相,功耗将是x10^9,这是不可忽视的,而且由于CPU中有数十亿个FET,功耗将是巨大的。
从这里我们可以看出,CPU的能耗与参与工作的晶体管数量有关,与频率呈正相关。下面我们分别来看看。
指令功耗如果我们简单地将CPU视为一个核心,那么我们是否可以通过执行while(1)来使CPU达到TDP呢?不多。每条指令调动的晶体管数量不同,功耗为调动的晶体管功耗之和。
《动物庄园》 有一句经典谚语:“所有动物生而平等,但有些动物比其他动物更平等。”所有的指令都是一样的吗?当然不是。有些指令更为等效。每条指令所需的晶体管数量差异很大,并且新指令与L1 指令高速缓存中已有的指令不同。以下是Hesswell CPU 流水线图的简化版本:
一条指令是否需要调度算术运算、访问外部存储器或写回,无论它是否在L1 中,都有很大的不同。管道各阶段的功耗饼图可总结如下:
可以看到取指令和解码占大多数,而执行次数只有%9! while(1); 此时编译的指令已经在L1中,取指节省了大量的能耗。这也是为什么ASIC 可以节省电力,而CPU 却需要消耗大量电力来实现相同的功能。
如果我们从平均意义上看一条指令的功耗,而不讨论指令之间的差异,我们得到正式名称EPI(Energy perstruction)。
EPI与CPU工艺和设计密切相关。英特尔CPU 的EPI 在P4 中达到顶峰,然后随着关注每瓦功耗而逐年下降。
能耗与频率的关系从图1可以直观地看出,能耗与频率之间存在正相关关系。这个理解是正确的;事实上,能耗和频率是线性相关的。有关能源消耗的公告如下(参考文献2)。
P代表能量消耗。 C 可以简单地视为由制造工艺和设计决定的常数,V 为电压,f 为频率。理想情况下,频率加倍也会使能耗加倍。看起来不太严重,是吗?然而,真实情况并非如此简单。
这里我们引入门延迟的概念。简单来说,组成CPU的FET进行充放电需要一定的时间,这个时间就是门延迟。只有在充电和放电完成后采样才能保证信号完整性。充电和放电时间与电压负相关。即电压越高,充放电时间越短。与制造工艺也有正相关关系;制造工艺越小,充电/放电时间越短。消除过程干扰。当我们在某个节点之后继续增加频率f 时,如果翻转太快,门延迟将无法跟上,从而影响数字信号的完整性。错误。这也是超频在某些阶段变得不稳定或随机失败的原因。所以我该怎么做?如果你聪明的话,你可能已经想到了超频中常用的一种方法:加压。顺便说一下,提高电压可以减少门延迟,使系统再次稳定。
如果我们回到方程,我们可以看到电压和功耗之间的关系不是线性的,而是正功率的关系。将其乘以f 会使情况变得更糟。提高频率需要同时提高电压,导致P显着增加!我们回想一下初中学过的y=x^3的函数图。
Y在初始阶段缓慢增加后,在a点开始快速上升。这是一个岔路口,一旦过了岔路就不能再往前走了。功耗和频率之间的关系类似,但让我们看两个现实世界的例子。
i7-2600K频率与功耗关系
Exynos 频率与功耗的关系
从ARM和X86阵营的角度来看,他们的能耗曲线是否类似于幂函数图?
至于其他因素,while(1);允许特定核心最多占用100%。 CPU 的短期目标是提供日益复杂的电源管理策略。最初,不工作的部分保持闲置状态,后来被修改为工作在较低的频率,甚至修改为不提供时钟信号,但仍然不够。 CPU 电源管理现在由PMC 处理,完全关闭电路中未使用的部分。
在操作系统层面,我们尽力将未使用的内核设置为CState,以便PMC等电源控制模块有足够的提示来关闭电源。
结论说了这么多,我们可以看到while(1); 并没有消耗整个CPU TDP。即使有核心,其能耗也不会达到核心能耗限制(目前都是turbo模式,核心能耗限制是动态结果)。您可以在Turbo 模式下将内核调至最高频率,但功耗不会那么高,因为所有指令都在L1 中。
消耗的能量去了哪里?根据能量守恒定律,它必须以热量的形式耗散掉。这个过程会产生动能(如风扇旋转)和光能(GPIO 驱动LED 发光),所有这些最终都转化为热能。








