CPU朝向多核发展,不停扩展核数,从某种程度上来说是一种“无奈之举”。
免费的午餐结束了
2007年,C++大牛Herb Sutter(Effective C++系列丛书作者)发表了文章《The Free Lunch Is Over》。直译就是“免费的午餐结束了”。
【原文】The Free Lunch Is Over
【翻译】The Free Lunch Is Over
主要的处理器设计生产商,从Intel和AMD到SPARC和PowerPC,已经几乎穷尽了所有的传统方法来提高CPU性能。
大多数应用在几十年内都可以获得免费规律的性能提升,甚至不需要发行新版本或做其他任何特殊的事情,因为CPU制造商(主要)和硬盘制造商(次要)拥有可靠的更新更快的主流系统。时钟频率不是衡量的唯一标准,甚至不是好性能的必要标准,但却是有指导意义的标准:
我们已经习惯看到500MHz的CPU被1GHz的替代,1GHz的被2GHz替代等等。今天主流电脑的主频可以达到3GHz的范围。
其实这2000年前,CPU的更新换代,主要是提升时钟频率,而非增加核数。而且那时CPU的每次升级,软件可以自动地获得大幅性能提升。然而问题逐渐棘手起来。
提高CPU主频变得越来越困难,因为这不仅仅是一个而是几个物理问题造成,特别是热、功耗过大、当前的电流泄露问题。
当时人们早早地获得了2GHz的CPU,3GHz也很快成为主流。按照发展速度,4GHz、5GHz甚至10GHz的的CPU都应该能如期而至。但是从3GHz以后,4GHz却迟迟不至。这受限于诸多物理问题。
为了能稳步地提升性能,CPU“被迫”朝向多核发展。当然CPU这么多年的计数发展不仅仅是时钟频率以及多核带来的,还有缓存,指令优化等等。但不得不说的是时钟频率和多核带来的提升更多些。
多核的发展,也就导致了多线程编程以及并行计算的流行。然而这需要程序员们编写相应的代码(并且是正确而优秀的代码)才能吃掉CPU新增的性能。而那个时钟频率为王的年代,程序员无需修改程序就能获得性能提升。
cpu运行在哪种频率下是有几种模式可以选择的。如果你是Linux系统的,可以尝试用cpupower frequency-info 命令查看一下。可能展示是结果是powersave(节能模式)、performance(性能模式)或其他模式。我还真听说过有线上机器没有开启performance模式,而是powersave模式跑了很长时间,改成performance以后,啥代码都不用改,就获得了几十毫秒的性能提升的事。当然这种问题可能相对低级,专业的运维或基础架构团队应该都能保障,不需要程序员操心。
回头再提一下CPU时钟频率的瓶颈。时至今日,我在公司的服务器机器上,查询CPU的频率的,基本也显示为3GHz。但咨询运维说机器CPU实际达不到满满的3GHz,只能到2.8GHz。我说怎么可能?他说用turbostat命令查看,那个显示的运行频率更真实。好吧。我试了一下还真是。
当然服务器和个人电脑的CPU是不同的。即使都是Intel家的,个人电脑一般是酷睿(Core)系列,而CPU是至强(Xeon)系列。自Herb Sutter发文的2007年,到如今也已经14年了。Intel其实也打造出来4GHz的产品。虽然比预期的时间晚了很多。然而毕十年之功于一役,后续稳步提升频率依旧艰难。所以程序员们,还是好好学习多线程编程和并行计算吧。
关于频率这个话题,我其实也不专业。大家感兴趣的话,可以阅读这里:
为什么 CPU 主频很难超过 4GHz? - 知乎和登那德定律有关系,貌似有公式能说明。https://www.zhihu.com/question/32096371
|