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


更好的制程能够让处理器设计方在同样的面积内塞入更多的晶体管 , 更多的晶体管在大多数时候都意味着处理器会有更强的性能 , 但根据上一节所说的 , 更多的晶体管会产生更大的静态功耗 。 另外 , 更先进的制程并不一定会在控制晶体管漏电率方面较老制程有优势 , Intel曾经在从65nm到45nm的演进时为了控制漏电率而引入了新的绝缘材料 。
上面说的都是制程对静态功耗方面的影响 , 再来说说它对动态功耗的影响 。 更新的制程能够让晶体管做的更小 , 降低了栅级的电容和阻抗 , 进而带来的是晶体管开关速度的优化 , 这能够降低逻辑门切换的延迟 , 允许处理器将主频提升到一个新的水平上去 。 但不可忽视的一点在于 , 提升晶体管开关频率的同时会增加动态功耗 , 如若我们要提升主频 , 那就要给晶体管加上更高的电压 , 让逻辑门切换的延迟跟上主频 , 更高的电压带来的就是更高的功耗 。
所以制程和功耗之间存在复杂的制约关系 , 制程的提升能够减少晶体管的电能开销 , 但为了更大幅度地提升性能而扩大芯片规模则会在一定程度上抵消掉制程提升带来的节能效果 , 另外追逐更高的主频也会产生更多的动态功耗 。 不过呢 , 设计CPU的团队一般都会考虑到这些复杂关系 , 尽可能的利用制程进步带来的好处 , 而规避掉它的弊端 。
不过在我们的实际使用过程中 , 即便是CPU同样跑到了占用率100% , 其功耗还是会有很大的不同 。 这是为什么呢?简单的说 , 不同软件或者指令会调用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的功耗也会出现明显的增加 。


推荐阅读