2核,4核,8核,16核。。。核竞赛硝烟弥漫,各个芯片厂商摩拳擦掌,不停的向CPU中塞入更多的内核。吃瓜群众越来越疑惑,“为什么我就不能做个安静的美男子,那么多核我用的上吗?”。本番外篇为你介绍Intel提高单线程处理能力的利器:睿频技术。
2核,4核,8核,16核。。。核竞赛硝烟弥漫。我们都知道操作系统调度的最小单位是线程(Thread),我们要使用这么多内核,必须对应用程序作出极大优化,将任务并行化处理交给不同线程。任务并行化有很大的难度,稍不小心就会造成死锁,调试起来也相当麻烦。事实上现在很多应用程序和游戏,在大多数情况下都是只有一个线程在运行,在个别内核极度繁忙时,其他内核却无事可做,可谓忙的忙死,闲的闲死。如何才能把闲置资源调动起来,让这个内核处理速度加快呢?
还是举我们在Cstates文章中的那个例子。想象一下,我们的那个有八个大车间的新工厂,厂房干净漂亮,传送带笔直干净,各个厂房之间有宽阔的道路,到处照明充足。这次我们有了上次的经验,在需求不足时关闭不用的车间,节省了电力。但是这次我们有了新的烦恼:有些产品只能在特定的车间组装,而这些产品需求量非常大,简直是供不应求。看着工厂各处忙闲不均,你陷入了沉思,如何才能利用起来空闲的产能呢?你灵机一动,你找人安装了一套电力转换器,可以随意调度各个车间的电力分配,并给生产机器人也加入了超频装置。这样你把空闲车间的电力转入这个忙碌车间,新注入的电力让生产线加速运转,机器人也像打了鸡血般疯狂运行,产出快多了!你一边盘算着年底的加薪,一边小心控制着电力注入,毕竟变电器爆掉或者产线过热着火就得不偿失了。睿频几乎也是一样的道理。
一个提高CPU主频的办法就是超频。热管,水冷,甚至液氮都向CPU上面招呼,各个论坛上超频爱好者们都在讨论如果榨出CPU所有的潜力,超频也是不少主板厂商的卖点。但是超频要适可而止,当水冷系统忽然坏掉,你的CPU和主板变成一堆昂贵的砖头,就欲哭无泪了。Intel一直在研究如何能在CPU运转不超过TDP (Thermal Design Power,散热设计功耗)的情况下,提高CPU主频。睿频(Intel Turbo Boost )技术随之诞生,有人叫它“官超”(很不准确)。
1. 睿频1.0
第一代睿频,在Nehalem 引入。核心功能是当部分内核空闲,进入CStates。内置的电能控制模块会把它们的电力转入忙碌内核,提高他们的电压和频率,使之超过标称主频,一般都有超过10%-20%的加速效果。这样做的前提是整体功耗不超过TDP。如下图:
2. 睿频2.0
在Sandy Bridge 引入。在这一代,主要的提高是将GPU也纳入了整体调节范围,在GPU不太忙碌的情况下,其电能也会被转入忙碌内核,反之亦然。另外一个很重要的改进是不再受TDP的硬约束,可以短暂的超过TDP运行,直到温度传感器达到特定阈值才缓慢回落。这样可以更好地处理突发任务。新加入的功能带来了复杂性,Intel也提供了应用程序方便用户查看状态,后文有详细介绍。
3. 睿频MAX 3.0
在Skylake引入。主要是识别处理器中速度最快的内核,并将最关键的任务引导至此,进而达到最佳化的效能。必须要指出它不是睿频2.0的替代品,它旨在提供灵活性和弹性,让处理器发挥更大效能。它的实现比较复杂,需要安装特别的驱动程序和软件,BIOS也需要做不少改动。它不在本文的讨论范围里。
以上都可以在Intel的官网上找到相应资料和软件,大家可以自行搜索睿频即可。
除去睿频 MAX 3.0外,睿频2.0和1.0都不需要安装特殊的驱动程序,OS只要支持EIST (Pstates)即可,它对OS是透明的。如前文介绍EIST中报告Pstate时说明的,我们在支持睿频时需要将P0留给Turbo Mode也就是睿频模式使用。CPU在睿频打开时,在收到进入P0的请求后,会自动根据算法将进入Cstate的内核的电力转移到P0的内核上,加压和提高频率。
这里需要指出的是在Sandy Bridge 之前,单个处理器内所有的内核都是在一个ACPI的Power Domain里,意味着睿频要工作,内核要不在P0,要不在Cstate,没有中间状态。
Q:我如何知道我进入了睿频模式呢?
A:安装Intel Turbo Boost Technology Monitor。当睿频还没启动而且比较空闲,显示这样:
当EIST开始工作,但睿频还没启动时:
睿频1.0启动时(原频率1.73GHz,睿频到2.93GHz):
睿频2.0启动时(原频率2.2GHz,睿频到3.0GHz):
线程融合技术,即CPU能自动将任务分解给各个CPU线程来运行,现在是各个研究机构的热点。在这个技术获得突破之前,睿频技术是我们提高单线程运算能力的得力工具。