2 并行优化-阿姆达尔定律
从90s到本世纪初,“面向摩尔定律编程”的套路越来越用不下去了。奔腾4开始,Intel意识到通过提升主频“难”以性能提升。开始推出多核CPU,提升“吞吐率”而非“响应时间”。即通过并行提高性能。
但要使用这种思想,需满足以下条件:
- 需要进行的计算,本身即可分解成几个可并行任务
比如向量的点乘运算 - 需要能够分解好问题,并确保几个人的结果能够汇总到一起
- 在“汇总”这个阶段,是没有办法并行进行的,还是得顺序执行,一步一步来
这就引出了阿姆达尔定律(Amdahl’s Law):
对一个程序优化后,处理器并行运算之后效率提升的情况可用如下公式表示:
优化后的执行时间 = 受优化影响的执行时间/加速倍数+不受影响的执行时间
比如向量点乘,同时计算向量的一小段点积,就是并行提高部分计算性能。但最终还是要在一个人那汇总相加,这部分时间无法并行优化,即不受影响的执行时间。
比如向量
- 点积需100ns
- 加法需要20ns
总共需要120ns。这里通过并行4个CPU有了4倍的加速度。那么最终优化后,就有了100/4+20=45ns。
即使增加并行度来提供加速倍数,比如有100个CPU,整个时间也需要100/100+20=21ns,所以并非越多就肯定越快。
3 让性能再次提升
无论是简单提升主频,还是增加CPU核心数,通过并行提升性能,都会遇到瓶颈。
仅靠“堆硬件”,已经不能很好地满足性能。于是,工程师们需要从其他方面开始下功夫。
在“摩尔定律”和“并行计算”之外,在整个计算机组成层面,还有如下:
3.1 大概率事件
深度学习,整个计算过程中基本都是向量矩阵计算。所以用GPU替代CPU,大幅度提升了深度学习的模型训练过程,Google不满足GPU性能,还推出了TPU。
3.2 流水线
现代的工厂里的生产线叫“流水线”。可以把装配iPhone这样的任务拆分成一个个细分的任务,让每个人都只需要处理一道工序,最大化整个工厂的生产效率。
CPU就是一个运算工厂,把CPU指令执行的过程进行拆分,细化运行。
3.3 预测
预测下一步而非苦等上一步结果,即提前运算。就像循环访问数组时,你也会猜到下一步会访问数组下一项。比如“分支和冒险”、“局部性原理”。
参考
- 《深入理解计算机操作系统》
- https://www.eda365.com/portal.php?mod=view&aid=53086