04 | 穿越功耗墙,我们该从哪些方面提升“性能”?

CPU 执行时间 = 指令数×CPI×Clock Cycle Time

搞定指令数或 CPI不太容易。于是CPU 上多放一点晶体管,提升 CPU 的时钟频率

1978 年 Intel 发布的 8086 CPU 开始,计算机的主频从 5MHz 开始,不断提升。

1980 年代中期的 80386 能够跑到 40MHz,

1989 年的 486 能够跑到 100MHz,

2000 年的奔腾 4 处理器,主频已经到达了 1.4GHz。消费者养成了“看主频”买电脑的习惯。

一、功耗:CPU 人体极限

不相信“大力出奇迹”奔腾 4 的 CPU 主频上限定格在 3.8GHz性能配不上)。奔腾 4 2.4GHz 性能和奔腾 3  1.6GHz 差不多。

2019 年最高配置 Intel i9 CPU, 5GHz。

二、CPU 主频奔腾 4 时代进入瓶颈期,为什么没能超过 3.8GHz 的障碍呢?

功耗问题:3.8GHz奔腾 4 ,满载功率130 瓦。(带上飞机的充电宝上限是 100 瓦时),把这个 CPU 安在手机里面,CPU 满载运行只能 45 分钟(不考虑屏幕内存之类的耗电)。iPhone X 使用 ARM 架构的 CPU,功率则只有 4.5 瓦左右。

CPU被叫作超大规模集成电路(Very-Large-Scale Integration,VLSI)。电路是一个个晶体管组成。CPU 计算,就是晶体管里面的“开关”不断地去“打开”和“关闭”组合完成各种运算和功能

计算快,CPU同样的面积里面,多放晶体管,增加密度;另一方面,让晶体管“打开”和“关闭”得更快一点,提升主频。都会增加功耗,带来耗电和散热问题。

把 CPU 想象工厂,工人协同工作。要工厂里多塞人。为什么不把工厂造得大一点呢?人和人之间离得远了,互相之间走过去需要花的时间就会变长,导致性能下降。动作快,每个人出汗,太热了,人中暑生病,崩溃出错。CPU 里晶体管数量和频率有限

三、CPU功耗 ~= 1/2 ×负载电容×电压的平方×开关频率×晶体管数量

提升性能,提升“制程”。从 28nm 到 7nm,晶体管本身变成了原来的 1/4 大小(找瘦小一点的工人,工厂里多一些人

提升主频(开关的频率变快),手脚更快的工人。

CPU 散热跟不上,就降低电压。电压下降到原来的 1/5,功耗会变成原来的 1/25

从 5MHz 主频的 8086 到 5GHz 主频的 Intel i9,CPU 的电压已经从 5V 左右下降到了 1V 左右。这也是为什么我们 CPU 的主频提升了 1000 倍,但是功耗只增长了 40 倍。Surface Go轻薄笔记本上,电压下降到 0.25V 低电压 CPU,笔记本更长续航时间。

四、并行优化,理解阿姆达尔定律

“面向摩尔定律编程”用不下去了。“写程序不考虑性能,等CPU 性能提升

奔腾 4 开始,推出 Core Duo 这样的多核 CPU提升“吞吐率”通过并行提高性能

这个思想很多地方都可用。举个例子,我们做机器学习程序的时候,需要计算向量的点积,比如向量 W=[W0,W1,W2,…,W15] W=[W0,W1,W2,…,W15]W = [W_0, W_1, W_2, …, W_{15}] 和向量 X=[X0,X1,X2,…,X15]X=[X0,X1,X2,…,X15]X = [X_0, X_1, X_2, …, X_{15}],W⋅X=W0∗X0+W1∗X1+W·X=W0∗X0+W1∗X1+W·X = W_0 * X_0 + W_1 * X_1 +W2∗X2+…+W15∗X15W2∗X2+…+W15∗X15W_2 * X_2 + … + W_{15}  *  X_{15}。这些式子由 16 个乘法和 1 个连加组成。如果你自己一个人用笔来算的话,需要一步一步算 16 次乘法和 15 次加法。如果这个时候我们把这个人物分配给 4 个人,同时去算 W0~W3W0~W3W_0~W_3, W4~W7W4~W7W_4~W_7, W8~W11W8~W11W_8~W_{11}, W12~W15W12~W15W_{12}~W_{15} 这样四个部分的结果,再由一个人进行汇总,需要的时间就会缩短。

并不是所有问题,都可通过并行提高性能解决。使用这种思想,条件:

(1)需要计算,本身可分解。同时进行,不影响结果。

(2)分解好问题,并确保能汇总

(3)“汇总”不能并行进行的,一步一步来。

阿姆达尔定律(Amdahl’s Law)。优化后,并行运算效率提升:

优化后的执行时间 = 受优化影响的执行时间 / 加速倍数 + 不受影响的执行时间

不受影响的执行时间:4 个人同时计算向量,计算结果,汇总相加时间,不能并行

各个向量的一小段的点积,需要 100ns,加法 20ns,总120ns。并行 4 个 CPU 有了 4 倍的加速度。优化后100/4+20=45ns。

五、总结延伸

在“摩尔定律”和“并行计算”之外,性能提升方法:

1.加速大概率事件。 GPU 替代 CPU, CPU跑几小时甚至几天的程序,GPU 只需几分钟。Google 更是不满足于 GPU 的性能,推出了 TPU。

“摩尔定律”和“并行计算”之外,通过“堆硬件”遇到相应的瓶颈,从其他方面开始下功夫了。

2.通过流水线提高性能。 CPU 是“运算工厂”。把 CPU 指令执行的过程进行拆分,细化运行。

3.通过预测提高性能提前运算,让程序跑更快。循环访问数组时,访问数组下一项。后面要讲的“分支和冒险”、“局部性原理”这些 CPU 和存储系统设计方法,都是利用对于未来的“预测”,

补充阅读

如果你学有余力,关于本节内容,推荐你阅读下面两本书的对应章节,深入研读。

1.《计算机组成与设计:软 / 硬件接口》(第 5 版)的 1.7 和 1.10 节,也简单介绍了功耗墙和阿姆达尔定律,你可以拿来细细阅读。

2. 如果你想对阿姆达尔定律有个更细致的了解,《深入理解计算机系统》(第 3 版)的 1.9 节不容错过。

你可能感兴趣的:(04 | 穿越功耗墙,我们该从哪些方面提升“性能”?)