摩尔定律还能走多远?—— CPU 的内存瓶颈
扫描二维码
随时随地手机看文章
在2002年之前,随着芯片密度的增加, CPU的时钟频率也一直不断增加。 对于普通消费者而言,CPU 的频率就代表计算机的快慢。 1981年最早出厂的 IBM PC, CPU 的频率是 4.77 兆赫, 相当于一秒钟四百七十七万个时钟周期。 假设 CPU 一个时钟周期可以运行一条指令, 频率越高, 就算得越快。
1995年的奔腾芯片,时钟频率达到了 100 兆赫, 是 1980年的二十倍还多。
而到了 2002年, 英特尔新型奔腾芯片时钟频率第一次突破 3000 兆赫 (3 GHz)。
限制时钟频率的第一个主要物理约束条件是: 信号在晶体管之间传输的迟滞。 这也是为什么晶体管密度越大,时钟频率可以越高。
2002年之后, CPU 时钟频率增加遇到了第二个技术瓶颈: 能量消耗。
简单说, CPU的能量消耗和时钟频率的三次方近似成正比, 在 3 Ghz 之后, 频率的继续提高会使芯片过热而面临被烧毁的风险。
实际上, 2002 年之后, 英特尔CPU 的时钟频率大多一直在 2 GHz - 4 GHz 之间, 十四年来没有本质提高。
但时钟频率不再增长, 并不意味着 CPU 性能的停滞不前。 就像人类的大脑, 过去二十万年没有本质变化, 但并不意味着人类文明不会发生开天辟地的进步。
这时候,最有用的思路,是寻找新的维度,去进攻解决问题。
如果说, CPU的时钟速度好比人脑的计算速度, 那么 CPU 的内存读取速度就好比人获取信息的速度。 这是提升 CPU 性能的第一个不同的维度。
有过基本工作或者研究经验的人,都会有这样的体会:
大多数时候,限制工作效率的瓶颈是: 查资料,找东西。
找不到就只能干着急。
二十年前的科研者,查资料要去图书馆,小图书馆没有资料就要去更大的图书馆,没有计算机检索之前需要一张张翻卡片查。 查找资料的时间,动辄就是几个小时甚至更多,超过了真正研究分析的时间。 这和今天,十秒钟内就可以在互联网上,精准搜索和下载世界上大部分论文资料,完全不可同日而语。
电脑的内存架构,实际上要细分为 Register (寄存器), Cache (高速缓存), Memory(内存), Disk (硬盘)。 而缓存又可以细分为一级缓存 (Level 1 Cache), 二级缓存, 三级缓存, 甚至四级缓存。
打个比方, 寄存器上的数据,好比你手中那张纸上写的信息, 信息量很少,但立等可取。
一级缓存, 好比桌面上的书, 信息量多一些, 伸一下手可以拿到;
二级缓存, 好比抽屉里的书,打开抽屉后仍然很快可以拿到;
内存,好比书架上的书,要站起来去查找;
硬盘,就是图书馆的资料,需要花几个小时到外面跑一趟才可以查到了。
研究者,如果无法迅速获取需要的资料,天天要往图书馆跑,即使牛顿/爱因斯坦再世, 聪明的脑瓜也只能像高速的 CPU 一样, 无效地空转, 痛苦地在来去图书馆的道路上等待。
以 Intel 的 i7-4770 CPU 为例,其时钟频率 3.4 GHz. 一级和二级缓存,读取数据的延迟一般在 5 - 12个时钟周期,相当于约 2-4 纳秒。如果要到内存读取数据,迟滞则约 70 纳秒,等价于200多个时钟周期。如果内存找不到,不幸地要去硬盘搜索,延迟超过 4 毫秒 (等价于四百万纳秒),再快的 CPU 时钟频率, 此时也然并卵矣。
摩尔定律的发展,对于 CPU 的时钟速度,和普通内存 (DRAM) 的读取延迟上,进步速度是不一样的。其差距每年以 50%的速度增长。
为了缓解这个矛盾,高速缓存 (Cache) 最早是以外置的形式出现在1985年的英特尔的 386的处理器上。
真正的芯片上的内置的缓存,最早是在1989年的 486处理器上出现,当时容量只有 8 KB, 到九十年代容量提高到 16 KB.
缓存容量过大,会影响搜寻速度,所以又出现了二级, 三级缓存。 这里有很多微妙的设计细节,此处不表。
缓存, 本质上就是以 SRAM (静态随机存储器)为基础的内存。 而SRAM, 本质上就是六个晶体管结构组成的逻辑单元, 如下图。
随着晶体管的小型化,芯片设计者就不断在 CPU 芯片上增加更多的内置的高速缓存。
以 2015年九月英特尔出品的 14 纳米 i7-6560U 处理器为例, 它有两个内核 (core), 每个内核有 64 KB 的一级缓存, 256 KB 的二级缓存, 并共享一个 4 MB的三级缓存。
用于缓存的晶体管占整个CPU 芯片上的晶体管的比例,也从 486时代的 40%左右,到今天许多CPU上接近 90%. (数据出处来自威斯康辛大学 Doug Burger 的论文, “Syetem-level Implication of Processor Memory Integration” )
换句话说,计算的管理,将近90%的内涵, 实际上是对内存记忆的管理。
不管在什么行业,如果做到了高效地搜寻和存储海量的数据, 你可能就已经成功了90%.