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


不同软件/指令下对晶体管的调动
由软件发出的指令经过CPU内核的解码和调度,最终进入到执行单元中被执行。执行单元有不同的种类,部分可能专门负责做加法,一部分可能专门负责做乘法。不同的执行单元在激活时会消耗不同的电能,也就是说,同样一个内核,在调用不同执行单元时其功耗会有很大不同。比如说现在处理器普遍支持AVX指令集,在支持AVX2的处理器上,一条AVX指令最多能够操作的数据宽度是原本SSE指令的两倍(128-bit=>256-bit),那么这就需要更宽的寄存器和执行单元来实现。
 晶体管|超能课堂(242):CPU的功耗是怎么产生的?它的功耗大小与哪些因素有关?
文章图片
关闭AVX指令集支持,此时的CPU功耗在133W左右
 晶体管|超能课堂(242):CPU的功耗是怎么产生的?它的功耗大小与哪些因素有关?
文章图片
打开AVX指令集支持,此时的CPU功耗在166W左右
 晶体管|超能课堂(242):CPU的功耗是怎么产生的?它的功耗大小与哪些因素有关?
文章图片
我们这里用了AIDA64的稳定性测试来简单说明,可以看到在同样使用FPU烤机时,关闭AVX指令的时候CPU功耗比开启时低了约莫有30W。
如果要更直观的说明,那不妨来看看服务器版Skylake内核的Die Shot:
 晶体管|超能课堂(242):CPU的功耗是怎么产生的?它的功耗大小与哪些因素有关?
文章图片
可以看到服务器版的Skylake内核在左上方有一块Server AVX-512区域,它就是用来支持AVX-512的。结合我们刚才所说的,更多的晶体管会耗更多的电,所以在调用AVX2、AVX-512这些更宽的指令集时,CPU的耗电量也会明显增加。
另外对功耗有影响的是现在x86处理器上面常见的同时超线程技术(SMT),它需要增加一定的晶体管数量,但能够获得比较可观的性能收益,由于超线程技术提升了执行单元的利用率,所以在开启了超线程技术之后,即便处在同样的满载情况下,CPU的功耗也会出现明显的增加。
电源管理策略的影响
处理器的功耗过大时会产生大量的热量,如果散热条件跟不上,那就会因为温度过高而影响晶体管的稳定性。另外在移动平台上,因为受到电池容量的制约,处理器的功耗不宜过大,那处理器该怎么控制自己的功耗呢?
现代处理器上面有各种各样的电源管理技术,比较通行的一种办法是将电源管理交由操作系统来负责。比如处理器厂商会为处理器定义多种电源状态,C-State和P-State就是两种常见的用于描述处理器电源状态的状态值。其中C-State用于节能,P-State用于决定CPU在有负载情况下的电压-频率状态。操作系统来根据当前的负载情况来调整CPU的状态,这样在检测到有高负载任务时,系统会将处理器调整到全速运行状态;在轻负载时,系统会让处理器进入低速状态,甚至将其部分关闭。
另外处理器厂商还加入了很多软硬件结合的节能技术,像是Intel和AMD在很久以前就给CPU引入的SpeedStep/Cool'n'Quiet这些技术都可以让CPU在不损失最大性能的同时,尽可能的节约能耗。现在则是有Speed Shift和Turbo Cove这样的技术接手了。
总结
CPU的功耗主要有动态功耗和静态功耗两大部分组成,前者主要由晶体管不断开关产生的,后者主要由晶体管漏电产生的。CPU那不断扩张的规模会抵消掉制程进步带来的一部分优化。在不同情况下,CPU的功耗表现会有很大不同,这主要是因为不同指令所调用到的晶体管数量是不同的。
为了管好CPU的功耗,CPU厂家也不断为它引入新的电源管理特性。如今的x86 CPU在节能表现上和当初已经不能同日而语了。但由于制程进步越来越困难而我们仍然需要不断扩张的CPU规模来提供更高的性能,所以未来的CPU也不会更为省电,不过它会拥有更好的能效比这一点是肯定的。


推荐阅读