我们应该从哪方面提升性能?
hello,大家好,我是罗十十十,上一讲我们了解了性能是什么,这一讲我们来了解一下如何提升性能。
这里有一个公式:
能比较简单的看到想要搞定指令数和CPI,看起来是比较困难的,但是CPU的时钟频率,提升比较简单,多放点晶体管就好了。那多放晶体管会面对什么问题呢?
功耗:CPU 的极限
如果要多放晶体管,我们一起来思考几个问题:
- 主频是否越大越好?
- 1978年-2000年 20年里主频提升了300倍,但是2000年到现在,主频只提升了3倍,是为什么呢?
- 现在最大的主频是5GHz,曾经intel想要做出10GHz的产品,但是为什么没有达到呢?
好,我们来了解一下原因,一般来说3.8GHz的奔腾4处理器,满载功率是130瓦。而iPhone12 A14的CPU是4.42瓦。这3.8GHz处理器要是放到iPhone12中,估计开机时间都超不过半小时,充电宝得准备十个。太耗电了,也会发很多的热,都可以煎鸡蛋了。
还有另外一个更重要的原因,到达5GHz的时候,发现性能还不如1.8GHz了。这是为什么呢?我一起先来了解一下CPU。
CPU具体是怎么工作的呢?
CPU被称为超大规模电路,像A14有118亿个晶体管,CPU在计算的时候,就是让这118亿个晶体管不断的开关,来完成计算。
一般来说提升性能的2种方式:
- 增加密度,也就是多放点晶体管
- 提升主频,让开关更快一些
这2中方式无一例外,都是功耗增加,带来耗电和散热的问题。
计算机一般选择的降温方式,都是在CPU上面抹硅脂、装风扇,或者水冷或者更好的散热设备,但是这些散热设备也是有极限的。
我们用一个公式表示功耗:
可以看到主频提升,晶体管数量增加,都是为了提升性能,那我们怎么减少功耗呢?从公式上来说,我们可以选择减低电压的方式,一般来说降低电压1/5,功耗就能减低1/25,挺完美啊,电压低了耗电量还少了呢,真是完美,但是这也是有极限的,就是有电阻的存在,这个电压太低,电路都连不通,还咋计算呢?
那还有没有另外的优化方案呢?
并行优化
比起一直在一块CPU上加晶体管,我们还可以多加几块CPU来并行提升计算性能,比如计算1+2+3+...+100=???,这个问题,就可以简单的分成5个人分段计算一部分,然后汇总,也是能提高性能的。
但是并行计算也是有条件的:
- 本身任务可以分解
- 确保可汇总
- 最后的汇总阶段还是得一步一步来
这里有个定律,阿姆达尔定律:
可以看到不受影响的执行时间限制了并行优化的效果。最后还是有无法优化的问题,极限的极限,不够完美,计算机的本质就是效率的提升,怎么能允许这种不完美!!聪明的程序员会想,在这种堆硬件的方式已经不能很好的提升性能了,那还有没有其他的办法呢?
当然有,还有一些其他方面提升性能的方法:
- 加速大概率事件,就是预先加载,或者是缓存经常执行的代码。
- 通过流水线提高性能,就是把能分步骤精细化,比如说并发编程。
- 通过预测提高性能,猜测下一步要做什么,提前运算。
以后我们会再聊一聊这三个方法。
总结
高频和多核是硬件方面提升性能的方式,也都有应该面对的极限。
计算机真的是追求完美啊,总是在面对极限的极限,不停的想办法,不断的寻求突破,我们的人生也应该如此,不断的进取啊!!