0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

while(1)到底占了多少CPU功耗呢?这些功耗去哪里了呢?

冬至子 来源:UEFI社区 作者:Wolf 2023-06-29 17:30 次阅读

CPU耗能的基本原理

我们将CPU简单看作场效应晶体管FET的集合。这么多个FET随着每一次的翻转都在消耗者能量。一个FET的简单示意图如下:

图片

图1

当输入低电平时,CL被充电,我们假设a焦耳的电能被储存在电容中。而当输入变成高电平后,这些电能则被释放,a焦耳的能量被释放了出来。因为CL很小,这个a也十分的小,几乎可以忽略不计。但如果我们以1GHz频率翻转这个FET,则能量消耗就是a × 10^9,这就不能忽略了,再加上CPU中有几十亿个FET,消耗的能量变得相当可观。

从这里我们可以看出CPU的能耗和有多少个晶体管参与工作有关,似乎还和频率是正相关的。我们下面分别来看一下。

指令功耗

如果我们将CPU简单看作单核的,是不是运行while(1);就能让该CPU达到TDP呢?实际上并不会。每条指令所要调动的晶体管数目不同,而功耗是被调动晶体管功耗的总和。

《动物庄园》有一句话很经典:“所有动物生来平等 但有些动物比其他动物更平等”。是不是指令都是平等的呢?当然不是了,有些指令更平等!每条指令需要调动的晶体管数目有很大不同,一条新指令和已经在L1指令Cache中的指令也不同。一个简化版Hesswell CPU的流水线示意图如下:

图片

一个指令要不要调度运算器,要不要访问外存,要不要回写,在不在L1中都会带来不少的区别。综合下来,流水线中各个阶段的功耗饼图如下:

图片

可以看到Fetch指令和decode占据了大头,而我们的执行才占据%9!!while(1);编译完的指令们,这时已经在L1中,Fetch会节省不少能耗。这也是达成同样功能,ASIC很省电,而CPU很费电的原因:

图片

如果我们不讨论指令的差异,在平均意义上来看指令的功耗,它有个专有的名词:指令功耗(EPI,Energy per Instruction)。

EPI和CPU制程、设计息息相关。Intel的CPU在P4的EPI达到一个高峰,后来在注重每瓦功耗的情况下,逐年在下降:

图片

Intel CPU EPI(数据较老)

耗能和频率的关系

从图1中,也许你可以直观的看出,能耗和频率是正相关的。这个理解很正确,实际上能耗和频率成线性相关。能耗关系公示是(参考资料2):

图片

P代表能耗。C可以简单看作一个常数,它由制程和设计等因素决定;V代表电压;而f就是频率了。理想情况,提高一倍频率,则能耗提高一倍。看起来并不十分严重,不是吗?但实际情况却没有这么简单。

我们这里要引入门延迟(Gate Delay)的概念。简单来说,组成CPU的FET充放电需要一定时间,这个时间就是门延迟。只有在充放电完成后采样才能保证信号的完整性。而这个充放电时间和电压负相关,即电压高,则充放电时间就短。也和制程正相关,即制程越小,充放电时间就短。让我们去除制程的干扰因素,当我们不断提高频率f后,过了某个节点,太快的翻转会造成门延迟跟不上,从而影响数字信号的完整性,从而造成错误。这也是为什么超频到某个阶段会不稳定,随机出错的原因。那么怎么办呢?聪明的你也许想到了超频中常用的办法:加压。对了,可以通过提高电压来减小门延迟,让系统重新稳定下来。

让我们回头再来看看公式,你会发现电压和功耗可不是线性相关,而是平方的关系!再乘以f,情况就更加糟糕了。我们提高频率,同时不得不提高电压,造成P的大幅提高!我们回忆一下初中学过的y=x^3的函数图:

图片

Y在经过前期缓慢的提高后在a点会开始陡峭的上升。这个a就是转折点,过了它,就划不来了。功耗和频率的关系也大抵如此,我们看两个实际的例子:

图片

i7-2600K频率和功耗的关系

图片

Exynos频率和功耗的关系

ARM和X86阵营来看,他们能耗曲线是不是和幂函数图很像?

其他因素

一个while(1);最多让某个内核占有率100%,其他内核呢?CPU近期的目标是提供越来越精细的电源管理策略。原来不跑的部分就让它闲着,后来改成它降频运行,接着改成不提供时钟信号,这样犹嫌不足。现在CPU的电源管理由PMC负责,它会完全切断不用部分的电路。

操作系统层面,它会尽力将不用的内核设置成CState,从而让PMC等电源控制模块有足够的提示(hint)来关闭电源。

结论

拉拉杂杂的说了这许多,我们可以看出,while(1);并不会耗掉整个CPU的TDP。就算一个内核,它的耗能也不会达到该内核的能耗上线(现在都是Turbo Mode,内核能耗上限是个动态的结果)。它可以把该内核拉入Turbo Mode的最高频率,但因为指令都在L1中,耗能也不会很高。

至于消耗的能量都到哪里去了,根据能量守恒定律,一定是变成热量散发出去了。这个过程中也许会产生动能(风扇转动等等),光能(GPIO驱动LED发光),但在最后的最后,都会变成热能。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电源管理
    +关注

    关注

    115

    文章

    6183

    浏览量

    144506
  • FET
    FET
    +关注

    关注

    3

    文章

    632

    浏览量

    62958
  • 场效应晶体管

    关注

    6

    文章

    363

    浏览量

    19508
  • LED发光
    +关注

    关注

    0

    文章

    23

    浏览量

    8252
  • 调度器
    +关注

    关注

    0

    文章

    98

    浏览量

    5249
收藏 人收藏

    评论

    相关推荐

    DAC功耗数据计算 功耗数字到底包括什么?

    电子发烧友网提供正确的DAC功耗数据计算方法,详细讲解了每个功耗数字到底包括什么?数字电路功耗
    发表于 11-30 16:11 4357次阅读

    使用这些设计技巧降低FPGA功耗

       新一代 FPGA的速度变得越来越快,密度变得越来越高,逻辑资源也越来越多。那么如何才能确保功耗不随这些一起增加?很多设计抉择可以影响系统的功耗
    发表于 01-11 11:59

    关于降低功耗在编程时的建议

    暂停指令,使系统进入休眠状态,较while(1)方式能极大的降低整体功耗;设置定时中断或事件中断,可以在需要处理时将CPU唤醒 这种方式对于电池供电的产品来说非常必要,如果没事做的时候
    发表于 03-27 11:21

    【精选】STM32功耗测试笔记

    功耗是永恒的话题,STM32的功耗到底怎么样
    发表于 03-03 12:45

    请问动态功耗怎么仿真

    DAC的静态功耗容易仿真,随便给一个码值仿真dc看直流电流总和,乘以电源电压。请问动态功耗怎么仿真
    发表于 06-24 06:55

    到底该怎么去使用KEIL的这些调试方法

    为什么要虚拟串口,这里的虚拟串口又是什么意思?到底该怎么去使用KEIL的这些调试方法
    发表于 12-21 07:20

    如何对STOP的休眠功耗模式进行调试

    STOP模式休眠功耗的调试过程是怎样的?如何对STOP的休眠功耗模式进行调试
    发表于 02-21 06:39

    请问TICKLESS是如何去实现功耗降低的

    什么是TICKLESS?怎么能实现功耗的降低?TICKLESS是如何去实现功耗降低的
    发表于 02-24 08:02

    小米MIUI8.2你到底好在哪里到底值不值得升级

    小米 MIUI8.2 稳定版已经更新,也有很多的米粉已经体验上了新功能。相比以往的MIUI版本到底好在哪里
    发表于 02-18 08:52 3w次阅读

    从微架构设计和制造工艺低功耗CPU的实现

    随着智能手机等移动应用的兴起,目前的处理器设计不仅要提供高性能,还必须要符合另一个重要指标,那就是低功耗。通过简单地降低电压或频率来实现低功耗不可取——试问有谁会去买性能打过折的产品?那么,低
    的头像 发表于 02-01 11:48 7296次阅读
    从微架构设计和制造工艺低<b class='flag-5'>功耗</b><b class='flag-5'>CPU</b>的实现

    如何知道真正的CPU功耗 功率墙问题怎么解决

    降速都有可能是达到了功率墙。那么,怎么知道真正的CPU功耗?是时候呼叫HWINFO这款小软件。 首先,我们要从官网https://www.hwinfo.com处下载HWINFO。这
    的头像 发表于 08-26 11:10 4.1w次阅读
    如何知道真正的<b class='flag-5'>CPU</b><b class='flag-5'>功耗</b> 功率墙问题怎么解决

    CPU内部到底是如何工作的

    众所周知CPU是中央处理器,它是控制处理中心,我们的电脑、手机等电子产品都离不开CPU。 那么,CPU内部到底是如何工作的?我们一起来看看
    的头像 发表于 04-04 14:36 5683次阅读
    <b class='flag-5'>CPU</b>内部<b class='flag-5'>到底</b>是如何工作的<b class='flag-5'>呢</b>?

    在Linux系统中系统变量存在哪里

    上面讲了很多系统变量,那么在Linux系统中,这些变量存在哪里?为什么用户一登录shell就自动有这些变量
    的头像 发表于 11-16 09:46 1930次阅读

    什么是低功耗设计

    想必各位ICer们在招聘JD上专门看到低功耗设计经验的要求,什么是低功耗设计?对于后端工程 师来讲,在物理实现方面就是引入多条电源线
    的头像 发表于 05-15 11:42 1257次阅读
    什么是低<b class='flag-5'>功耗</b>设计<b class='flag-5'>呢</b>?

    CPU的低功耗与高功耗的区别

    CPU的低功耗与高功耗之间存在多方面的区别,这些区别主要体现在功耗水平、性能表现、应用场景、成本效益以及威廉希尔官方网站 实现等多个维度。
    的头像 发表于 08-07 15:43 4167次阅读