资讯详情

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

学习笔记-总目录

通过功耗墙,我们应该从哪些方面来提高性能?

  • 前言
  • 一、功耗:CPU 人体极限
  • 二、并行优化,了解阿姆达尔定律
  • 三、延伸【略看】
  • 四、总结【个人总结重点】

前言

上一讲,在讲 CPU 在性能方面,我们提到了这样一个公式:

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

在这种情况下,如果我们想提高计算机的性能,我们可以从指令数、CPI 以及 CPU 主频从这三个地方开始。确定指令数或指令数。 CPI,乍一看并不容易。

于是,研发 CPU 硬件工程师,从 80 从年代开始,就挑上了 CPU 这个软柿子。晶体管,不断提升 CPU 时钟频率可以让 CPU 程序的执行时间会缩短。

于是,从 1978 年 Intel 发布的 8086 CPU 从一开始,计算机的主频就开始了 5MHz 开始,不断改进。 1980 年代中期的 80386 能够跑到 40MHz1989 年的 486 能够跑到 100MHz, 直到 2000 年的奔腾 4 处理器,主频已到达1.4GHz

5MHz(1978年,8086CPU) 40MHz(1980年代中期, 80386CPU) 100MHz(1989年,80486CPU) 1.4GHz(2000年, 奔腾4处理器)

而且消费者也在这里 20 多年来,我养成了看主频买电脑的习惯。当时桌面基本垄断了 CPU 市场的 Intel 更夸下海口,说奔腾 4 所使用的 CPU 可以做到结构 10GHz,有点大力出奇迹。

一、功耗:CPU 人体极限

然而,计算机科学界从未相信大力出奇迹。。这不是最糟糕的。更糟糕的是,人们发现奔腾 4 虽然主频率很高,但其实际性能并没有提高多少。奔腾想用在笔记本上 4 2.4GHz 处理器,其性能只和基于奔腾 3 架构的奔腾 M 1.6GHz 处理器差不多。

因此,这一次的大力悲剧不仅让 Intel 的对手 AMD 获得喘息的机会着主频时代的终结。 Intel CPU 主频没有上升,而是下降了。到目前为止,2019 年度最高配置 Intel i9 CPU,主频主频 5GHz 而已。相较于 1978 年到 2000 年,这 20 年300 倍从 2000 这一年到现在 19 年,CPU 主频大概增加了3 倍

在这里插入图片描述 奔腾 4 为什么主频不能超过 3.8GHz 障碍呢?答案是功耗。功耗问题是什么?让我们先看一个直观的例子。

一个 3.8GHz 的奔腾 4 满载功率为处理器130 瓦。这个 130 瓦片的概念是什么?机场允许飞机充电宝的容量上限是100 瓦时。假如我们这样做 CPU 安装在手机里,不考虑屏幕内存等功耗,这个 CPU 满载运行 45 分钟,充电宝里电了。 iPhone X 使用 ARM 架构的 CPU,功率则只有 4.5 瓦左右。

我们的 CPU,一般称为。这些电路实际上是由晶体管组成的。CPU 在计算中,实际上是让晶体管中的开关不断打开和关闭,结合各种计算和功能

一方面,我们想快速计算 CPU 在同一面积内,放置更多的晶体管,即;另一方面,我们应该更快地打开和关闭晶体管。两者都会增加功耗,带来耗电散热问题。


这么说可能还是有点抽象,我还是给你举一个例子。你可以把一个计算机 CPU 想象一个巨大的工厂,里面有很多工人,相当于 CPU 上述晶体管相互配合。

为了工作得更快,我们必须在工厂里塞更多的人。你可能会问,为什么不把工厂建得更大呢?这是因为,如果人们离得很远,他们需要更长的时间才能走过去,这也会导致性能下降。就好像如果 CPU 面积大,晶体管间距大,电信号传输时间长,运行速度慢。

除了多塞一点人,我们也希望每个人的动作都更快,这样我们就可以在同一时间做更多的工作。这相当于

我们会在 CPU 抹硅脂,安装风扇,甚至使用水冷或其他更好的散热设备,就像在工厂安装风扇、空调、冷饮一样。


因此,在 CPU 在里面,晶体管的数量和晶体管的开关频率也有限。 CPU 可以用这样的公式来表示:

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

然后,为了提高性能,我们需要不断增加晶体管的数量。在同一区域,如果我们想放更多的晶体管,我们必须使晶体管更小。这就是我们通常所说的完善工程。这相当于我们在工厂,同样的工作,我们想找一个更瘦的工人,这样一个工厂就可以有更多的人。我们还需要提高主频率,使开关的频率更快,也就是说,我们需要找到更快的工人。 但是,。在整个功耗公式中,。这意味着电压下降到原来的水平 1/5,整个的功耗会变成原来的 1/25。

事实上,从 5MHz 主频的 8086 到 5GHz 主频的 Intel i9,CPU 电压已经从 5V 左右下降 1V 左右。这就是为什么我们 CPU 主频增加 1000 倍,但功耗只增加了。 40 倍。例如,我用这篇文章写这篇文章 Surface Go,在如此轻薄的笔记本上,微软选择将电压降低到 0.25V 的低电压 CPU,使笔记本能有更长的续航时间。

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

尽管过去工艺的优化和电压的下降 20 年,让我们的 CPU 性能有所提高。但从90年代到本世纪初,软件工程师使用的摩尔定律编程套路越来越不可用。写程序不考虑性能,等明年 CPU 性能翻了一番,性能自然就不成问题了。

于是,从奔腾 4 开始,Intel 意识到通过提高主频难来提高性能开始推出 Core Duo 这样的多核 CPU,通过提高吞吐率而不是响应时间来实现目标

提高响应时间就像提高你使用的交通工具的速度。例如,你最初开车,但现在它变成了火车甚至飞机。从上海到北京开车 20 个小时,换成飞机就只要 2 已经一个小时了,但是,在此之上,提高速度并不容易。 CPU 在奔腾 4 就像飞机的速度极限一样。

那你可能要问,接下来该怎么办?与加速飞机相比,工程师们想出了新的方法,可以一次同时开 2 架、4 架乃至 8 就像我们现在用的飞机一样 2 核、4 核,乃至 8 核的 CPU

虽然从上海到北京的时间没有改变,但一次飞行 8 飞机自然会运输更多的东西,也就是所谓的吞吐率。所以,不管你需要不需要,现在 CPU 性能有所提高 2 倍乃至 8 倍、16 倍。这也是提高性能最常见的方法,。。

这个想法可以在很多地方使用。例如,当我们做机器学习程序时,我们需要计算向量点积,如向量 W=[W0,W1,W2,…,W15] 和向量 X=[X0,X1,X2,…,X15],W?X=W0?X0 W1?X1 W2?X2 … W15?X15。这些式子由 16 个乘法和 1 一个连加组成。如果自己用笔算,需要一步一步算。 16 次乘法和 15 次加法。如果这时候我们把这个任务分配给 4 个人,同时去算 W0​~W3​, W4​~W7​, W8​~W11​, W12​~W15​ 这样四个部分的结果,再由一个人进行汇总,需要的时间就会缩短。 但是,并不是所有问题,都可以通过并行提高性能来解决。如果想要使用这种思想,需要满足这样几个条件。

  • 第一,需要进行的计算,本身可以分解成几个可以并行的任务。好比上面的乘法和加法计算,几个人可以同时进行,不会影响最后的结果。

  • 第二,需要能够分解好问题,并确保几个人的结果能够汇总到一起。

  • 第三,在“汇总”这个阶段,是没有办法并行进行的,还是得顺序执行,一步一步来。

这就引出了我们在进行性能优化中,常常用到的一个经验定律,。这个定律说的就是,对于一个程序进行优化之后,处理器并行运算之后效率提升的情况。具体可以用这样一个公式来表示:

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

在刚刚的向量点积例子里,4 个人同时计算向量的一小段点积,就是通过并行提高了这部分的计算性能。但是,这 4 个人的计算结果,最终还是要在一个人那里进行汇总相加。这部分汇总相加的时间,是不能通过并行来优化的,也就是上面的公式里面这一部分。

比如上面的各个向量的一小段的点积,需要 100ns,加法需要 20ns,总共需要 120ns。这里通过并行 4 个 CPU 有了 4 倍的加速度。那么最终优化后,就有了 100/4+20=45ns。即使我们增加更多的并行度来提供加速倍数,比如有 100 个 CPU,整个时间也需要 100/100+20=21ns。

三、延伸【略看】

我们可以看到,无论是简单地通过提升主频,还是增加更多的 CPU 核心数量,通过并行来提升性能,都会遇到相应的瓶颈。仅仅简单地通过“堆硬件”的方式,在今天已经不能很好地满足我们对于程序性能的期望了。于是,工程师们需要从其他方面开始下功夫了。

在“摩尔定律”和“并行计算”之外,在整个计算机组成层面,还有这样几个原则性的性能提升方法。

1.。最典型的就是,过去几年流行的深度学习,整个计算过程中,99% 都是向量和矩阵计算,于是,工程师们通过用 GPU 替代 CPU,大幅度提升了深度学习的模型训练过程。本来一个 CPU 需要跑几小时甚至几天的程序,GPU 只需要几分钟就好了。Google 更是不满足于 GPU 的性能,进一步地推出了 TPU。后面的文章,我也会为你讲解 GPU 和 TPU 的基本构造和原理。

2.。现代的工厂里的生产线叫“流水线”。我们可以把装配 iPhone 这样的任务拆分成一个个细分的任务,让每个人都只需要处理一道工序,最大化整个工厂的生产效率。类似的,我们的 CPU 其实就是一个“运算工厂”。我们把 CPU 指令执行的过程进行拆分,细化运行,也是现代 CPU 在主频没有办法提升那么多的情况下,性能仍然可以得到提升的重要原因之一。我们在后面也会讲到,现代 CPU 里是如何通过流水线来提升性能的,以及反面的,过长的流水线会带来什么新的功耗和效率上的负面影响。

3.。通过预先猜测下一步该干什么,而不是等上一步运行的结果,提前进行运算,也是让程序跑得更快一点的办法。典型的例子就是在一个循环访问数组的时候,凭经验,你也会猜到下一步我们会访问数组的下一项。后面要讲的“分支和冒险”、“局部性原理”这些 CPU 和存储系统设计方法,其实都是在利用我们对于未来的“预测”,提前进行相应的操作,来提升我们的程序性能。

各种缓存(内存缓存、CDN缓存)

并发编程、异步编程

音视频播放器边播放边缓冲

小说的下一页预加载

电商大促的CDN预热

四、总结【个人总结的重点】

【计算机组成原理】学习笔记——总目录

标签: 安硅x电容集成电路x05w15kr电阻5w12v直插二极管sick小型光电传感器w12g

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台