晶体管|超能课堂(242):CPU的功耗是怎么产生的?它的功耗大小与哪些因素有关?

【 晶体管|超能课堂(242):CPU的功耗是怎么产生的?它的功耗大小与哪些因素有关?】作为现今PC平台上的两个能耗大户之一,CPU的功耗问题可谓是牵扯了非常之多的关系户,比如说主板的供电系统要根据CPU的功耗来设计,比如说为CPU散热的散热器要根据CPU的功耗去设计,还有电源要为CPU准备好足够的供电……但你知道CPU的功耗是怎么产生的吗?为什么这么一块小小的芯片要用掉这么多的电能?本文就对CPU功耗产生的原理进行简单的阐述,简单讲述一下CPU的功耗具体都跟哪些因素有关系。首先我们要从构成CPU的基础单元——晶体管开始说起。
 晶体管|超能课堂(242):CPU的功耗是怎么产生的?它的功耗大小与哪些因素有关?
文章图片
晶体管的工作方式与功耗是怎么产生的?
大家都知道各种数字电路芯片的基础成员是一个个非常非常小的晶体管,在目前的处理器上面常见的是场效应管(FET),在CPU上比较常见的MOSFET大概长成下面那张图片的样子:
 晶体管|超能课堂(242):CPU的功耗是怎么产生的?它的功耗大小与哪些因素有关?
文章图片
当我们在这个晶体管的栅极与源极之间施加电压的时候,能够改变源极与漏极之间的阻抗,从而控制源极到漏极之间的电流大小。利用这种特性,我们可以把多个晶体管组成一个组合,它可以让表示两种信号的电平在通过组合后产生高电平或低电平的信号,高低两种电平可以对应到逻辑上的“真”与“假”,亦可对应二进制中的“1”和“0”。这种晶体管的组合被称为逻辑门,将多个逻辑门组合到一起可以实现更为复杂的逻辑运算。CPU就是由非常多的逻辑门组成的。
那么在CPU工作的时候,组成它的逻辑门状态实际是一直在发生着改变的,此时可以将逻辑门内部的晶体管视为小电容,电容的充放电就引起电能流动,此时就产生了CPU的动态功耗。
为什么说这功耗是动态的呢?因为这部分功耗的大小与CPU的运行状态有关。我们知道,主频是CPU最主要的规格之一,它指的是晶体管在一秒内的开关次数,晶体管开关次数越高,频率也就会更高,但总的充放电次数也同时增加了,于是晶体管的耗电量也就随之增加。
通过实际测算,人们发现CPU的动态功耗与频率成正比,与电压的平方大致成正比,也就可以导出如下的公式:
 晶体管|超能课堂(242):CPU的功耗是怎么产生的?它的功耗大小与哪些因素有关?
文章图片
也就是说,CPU的电压越高,频率越高,其动态功耗就会越大。有动态功耗,相对的自然就有静态功耗的概念,这部分主要来自于晶体管的漏电。
让我们回到本节开头的MOSFET结构示意图上,在栅级的下方有一层很薄的氧化层,它起到绝缘的作用。在把晶体管做小的过程中(也就是制程进步的过程中),这个绝缘层的厚度越来越薄,由于量子效应,部分电荷载流子将穿过这薄薄的绝缘层,出现漏电现象。这种漏电现象将增加晶体管的耗电量,虽然单个晶体管的漏电量相当微小,但是当晶体管的数量达到上亿甚至是数十亿级别之后,整个的漏电量就不容小觑了。
除了漏电以外,还有一部分静态功耗是晶体管出现导通情况引起的。在逻辑门状态发生改变的时候,组成它的部分晶体管可能会出现同时导通的情况,也就是短路的情况,此时会产生短路功耗,其大小与逻辑门的大小相关。
综上所述,我们可以把CPU的功耗分成两大类,分别是CPU在运算时产生的动态功耗和CPU在加电时产生的静态功耗,静态功耗中的绝大部分是由晶体管漏电所引起的。因此,我们可将CPU的功耗大小与CPU的主频、规模和制程等因素联系在一起。
制程与功耗的复杂关系
这几年Intel的桌面处理器制程止步不前,14nm++++甚至已经成为一个笑柄,而“Intel处理器功耗相对偏高”这个问题也不断被大家所指出,那么制程跟功耗之间到底有什么样的关联关系呢?
更好的制程能够让处理器设计方在同样的面积内塞入更多的晶体管,更多的晶体管在大多数时候都意味着处理器会有更强的性能,但根据上一节所说的,更多的晶体管会产生更大的静态功耗。另外,更先进的制程并不一定会在控制晶体管漏电率方面较老制程有优势,Intel曾经在从65nm到45nm的演进时为了控制漏电率而引入了新的绝缘材料。
上面说的都是制程对静态功耗方面的影响,再来说说它对动态功耗的影响。更新的制程能够让晶体管做的更小,降低了栅级的电容和阻抗,进而带来的是晶体管开关速度的优化,这能够降低逻辑门切换的延迟,允许处理器将主频提升到一个新的水平上去。但不可忽视的一点在于,提升晶体管开关频率的同时会增加动态功耗,如若我们要提升主频,那就要给晶体管加上更高的电压,让逻辑门切换的延迟跟上主频,更高的电压带来的就是更高的功耗。
所以制程和功耗之间存在复杂的制约关系,制程的提升能够减少晶体管的电能开销,但为了更大幅度地提升性能而扩大芯片规模则会在一定程度上抵消掉制程提升带来的节能效果,另外追逐更高的主频也会产生更多的动态功耗。不过呢,设计CPU的团队一般都会考虑到这些复杂关系,尽可能的利用制程进步带来的好处,而规避掉它的弊端。
不过在我们的实际使用过程中,即便是CPU同样跑到了占用率100%,其功耗还是会有很大的不同。这是为什么呢?简单的说,不同软件或者指令会调用CPU不同的区域,调用的晶体管数量是不同的。


推荐阅读