摩尔定律的前世今生

当你阅读这段文字的时候,或许没有意识到这背后的供电、网络传输、计算、显示等所有环节,都在由小小的集成电路控制着。可以毫不夸张的说,集成电路是人类历史上最伟大的发明。然而想要了解这人类智慧的结晶,就不得不先提到一个定律:

摩尔定律 (Moore's Law) —— 集成电路上可容纳的晶体管数目,约每两年便会增加一倍。

0. 不是定律的定律

虽有“定律”二字,但摩尔定律并非像物理定律一样对某个自然现象做出了归纳总结,它其实是对未来的一个预测。1965年,英特尔的创始人之一戈登·摩尔(Gordon Moore) 通过两个数据点作出一条直线(野史),提出了这个大胆的预测。虽说仅仅是个预测,但在无数人的努力下,集成电路按照这个速率发展了近半个世纪,使得人类社会产生了翻天覆地的变化。由此看来,对于这样一个具有前瞻性的预测,称其为定律也就不为过了。

1. 指数大爆炸

通过下面这幅图,我们可以直观地感受到摩尔定律所带来的震撼。

根据摩尔定律的预测,在1971到2011这40年里,晶体管(transistor)的数量应该翻了2^(40/2)=2^20 ~= 1,000,000倍。而实际情况呢?1971年发布的Intel 4004处理器拥有2,300个晶体管,2011年Intel发布的Sandy Bridge架构六核Core i7处理器拥有22.7亿个晶体管,二者正好相差100万倍。

Intel 4004
Intel 4004
Intel Core-i7
Intel Core-i7

晶体管数量的指数大爆炸,使得集成电路可以容纳更多、更复杂的运算单元和更大的存储空间。而晶体管数目能够呈指数增长的一大原动力来自于晶体管尺寸的不断缩小(Device Scaling)。我们在购买处理器时常常会听到22纳米,14纳米等词汇,这指的是半导体器件在当前制造精度允许下的最小尺寸,因此可以直接反映出晶体管的大小。上文提到的Intel 4004采用的是10微米的制程,而Sandy Bridge架构则采用了32纳米的制程(1微米=1000纳米),二者相差三个数量级。这还要归功于半导体理论、材料科学、加工工艺、光学技术等多个学科与工程技术的不断发展与革新。

晶体管尺寸的缩小还大大减少了运算的延迟,提高了集成电路的运行速度。集成电路的时钟频率(clock frequency) 是其运行速度的重要指标之一,形象一点来讲可以理解为处理器的心率。Intel 4004的时钟频率为500KHz,即1秒钟内“心脏”可以跳五十万次。而仅仅40年后,Sandy Bridge架构Core-i7处理器的时钟频率最高可达到3.4GHz(1GHZ = 1,000MHz=1,000,000KHz)。数量和速度的结合,让集成电路的性能也呈指数级增长。

2. 摩尔定律之“死”

虽有古语云:“一尺之棰,日取其半,万世不竭”,但在现实世界中,晶体管是有其极限的。事实上,从近几年的数据来看,芯片的发展已经渐渐偏离了摩尔定律所预设的轨迹——我们已经离晶体管的极限越来越近了。

第一个极限来自于物理维度上的限制。晶体管的开与关是通过晶体管栅极(Gate)上电压的改变来控制的。随着晶体管尺寸的不断缩小,栅极氧化层(Gate Oxide)的厚度也逐渐减少到了如今的1-2纳米,这直接导致了愈发明显的量子穿隧效应(Gate Oxide Tunneling)。因其机理略微复杂,在此不做详述。但总而言之它会使晶体管变得难以控制甚至根本无法工作,同时大大增加电路的漏电功耗(leakage power)。而且即使量子效应所带来的种种问题能被克服,我们也不可能把厚度降到0.2纳米以下——因为那是一个硅原子的厚度。你不会想要切割一个原子,毕竟我们要造的是芯片,不是核弹(黄仁勋:???)。

第二个极限,则来自于功耗墙(power wall)。有心的朋友可能会发现,近几年来市面上销售的处理器的时钟频率并没有什么太大提升,以桌面处理器为例,其频率始终处在3-4GHz的范围。这背后最大的元凶便是功耗。对于桌面设备或者服务器,高功耗会大大增加散热的成本,过于集中的热量甚至会使得部分晶体管根本无法被启动;对于移动设备,高功耗则是续航能力的头号天敌。从下图不难看出,处理器的设计功耗(Typical Power, 橙色线条)在2005年之后就几乎停滞不前了。而也正是由于功耗的限制,处理器的设计者们把目光从提升时钟频率(Frequency, 绿色线条)和单线程性能(Single-thread Performance, 蓝色线条),转向了多核心的发展(Number of Cores, 黑色线条)。

读到此处,很多人心中不免会有疑问:堆放更多的核心不是应该会让功耗变得更大吗,为什么反倒成了解决功耗问题的手段?这是因为,在同样的制程下,处理器的功耗和单线程性能并非简单的线性关系,提升30%单线程性能的代价很可能是额外一倍的功耗。举个例子,假设一匹马拉2吨的货物需要喂100斤饲料,而拉1吨的货物只需要20斤饲料。那么如果我们有两匹马,让每匹马拉1吨的货物,只要40斤饲料就能拉动2吨的货物。多核心正是利用了这种非线性的关系,缓解了单核性能难以提升困局。

然而不幸的是,多核心所带来的效益终究是有限的。包子可以十个一起蒸,但是只能一个一个吃,同样的道理在计算领域也是适用的。多核心只能优化计算任务中可以并行执行的部分,对于必须顺序执行的部分则毫无裨益。而现实世界中并不存在能够完全并行的计算任务,因此多核心对于性能的提升是有限度的。这便是Amdahl's law的由来。

图中的横坐标表示处理器的数量,纵坐标代表加速比,不同颜色的线条表示一个计算任务中有多少比例可以被并行执行。不难看出,即便有95%的任务可以被并行执行,不论我们放上多少颗处理器,速度的提升也不可能超过20倍。因此提升核心数量的边际效益是在不断减小的。

正是由于不断逼近的物理极限、难以逾越的功耗墙、不可持续的多核心等等原因,持续近半个世纪的光辉正在渐渐消散,摩尔定律已基本被学术界判了死刑。

3.  超越摩尔(More than Moore)

摩尔定律的失效并不意味着集成电路的性能将会止步不前,晶体管尺寸的缩小和数量的增加不是提高性能的唯一手段。在后摩尔定律时代,我们仍然有许多方法来延续奇迹。由于篇幅限制,这里只列举两个较为经典的例子。

i) 通用与专用

CPU、GPU、NPU……相信很多人都会好奇,它们之间究竟有什么区别?这就涉及到芯片设计的两个概念了——通用与专用。我们平时最常听到的CPU,便是一种通用处理器(General Purpose Processor)。你可以把它理解为一把功能齐全的瑞士军刀,足以高效地满足日常任务的需求。而GPU、NPU则属于专用处理器,更专业的说法是ASIC (Application Specific Integrated Circuit)。它们是为了特定任务而生,因此可以理解为一把锯子,或者一个电钻。用瑞士军刀砍树枝,并非不可能,只是速度远远不比用锯子来得快;相反的,用锯子去开啤酒瓶盖,自然也比不上直接用瑞士军刀的开瓶器。以最近火爆的人工智能为例,各式各样的算法归根结底都要依赖于海量的矩阵运算。对于通用处理器,由于其只提供最基础、通用的加减乘除指令,完成一个简单的矩阵运算可能需要几十条甚至上百条指令。而一颗专为人工智能打造的芯片,譬如近来概念炒得飞起的"NPU", 则一定会有为矩阵运算量身定做的运算单元,可能一条指令就可以完成一个矩阵乘法。因此对于人工智能的任务,NPU比CPU快上几十倍上百倍是非常正常的,毕竟人家是吃这口饭的。可是你要让NPU跑一个操作系统,很抱歉,臣妾做不到啊,不仅效率相差十万八千里,而且有些操作根本无法实现。

General Purpose
General Purpose
Application Specific
Application Specific

那么是不是只要根据不同的任务搭载相应的专用芯片,让专业的人办专业的事,集成电路的性能就可以有数量级的提高呢?答案是肯定的,这也正是集成电路今后发展的一大趋势——Heterogeneous Computing,通过在一个系统上搭载不同类型的处理单元来提高性能、降低功耗。然而天下没有免费的午餐,搭建这样一个系统的难度系数是非常高的。第一个挑战来自于设计专用芯片的高难度、高成本和小受众。这就好比定制西服,设计师需要对客户的身材进行全面的丈量,继而进行剪裁和制作。而一旦西服制作完成,其他人再穿就不合身了。同时如果客户的身材走样,西服也需要重新设计和制作。因此能设计专用芯片的公司少之又少。第二个难点在于系统上各个芯片之间的通讯。不同用途的芯片都讲着各自的语言,它们之间的交流需要有一个统一的标准和规范。众所周知,不同语言之间的转译是需要耗费大量的时间和资源的,而且相同语系的语言之间的转换容易,不同语系之间的转换困难。不仅如此,当一大屋子的人都在讲话时,谁先说话、谁后说话,如何保证重要的话所有的人都听得见,这都有许多的门道,需要一套协议来进行管理。所以这个通用的标准既要考虑转译的高效性,又要兼顾到不同语言的特性,还要充当管理者的角色,其难度可想而知。不过即便如此,随着通用处理器性能提高的难度越来越大、成本越来越高,在市场的导向下工业界最终一定会把精力投入到Heterogeneous Computing的研发之中。

ii) 突破内存的瓶颈

大部分集成电路的瓶颈其实不在运算速度,而在于数据的搬运。处理器在几个时钟周期内就可以完成一个加法运算,但是如果加法运算的数值需要从内存中读取,这个时间一下就会变成上百个时钟周期。因此提升内存的访问速度会极大地提高集成电路的性能。记得之前在学校参加校招时,有同学被问到了这样一个问题:“内存访问太慢,怎么样可以改善性能?”正常人的第一反应自然是增大缓存,使用乱序执行、推测执行等等,因为这个问题给人的感觉是预设了内存访问很慢这个前提条件。但是这个奇葩的面试官可不按常理出牌,他想听的答案是:把内存放近一点。

可能此时你已经在心里开骂,不过这却是一个非常正确的答案。因为内存访问慢的一大原因就是它离的太远了。一般来说,处理器和内存分别位于不同的芯片上,它们之间距离远、电阻电容大,因此两边通信一次可谓是路漫漫其修远兮。然而学者和工程师们上下而求索,发明了种种黑科技以试图解决这个问题,其中极有前景的当属3D stacking。

3D Stacking

从上图可以看出,通过这种技术,我们可以像叠罗汉一样把内存芯片放置在处理器芯片的上方,它们之间的通信则由Through Silicon Via (TSV) 完成。TSV的使用缩短了不同芯片之间通信的距离,因此可以显著地提升信号传输的速度。不仅如此,与传统的导线相比,可放置的TSV在数量上也有具有很大的优势,这直接转化为更大的带宽。如果用一句直观的话来概括,那就是两地之间的距离缩短了,马路拓宽了,车速加快了,岂不美哉。当然,这种技术当前还面临工艺、材料、散热、良品率等种种挑战。不过对于工程师们,一切皆有可能,毕竟我们曾以为22纳米便是晶体管的极限了,可是不知不觉中我们已经迈入了7纳米的时代。

4. 没有硝烟的战场

我国的集成电路的自给率低,技术代差大。根据官方的统计,中国每年集成电路的进口约为2200亿美元,甚至超过了石油。而就在2018年上半年的中美贸易摩擦中,中兴被美国禁运芯片,一时间仿佛人人都得了“芯”病。信息时代的今天,集成电路几乎被用在每一个设备之上,没有这项核心技术,便堪比阿喀琉斯之踵。国家当然也清楚地认识到这一点,集成电路产业当前是战略布局中的重要一环。然而我们也要清楚地认识到,集成电路是一个庞大的系统工程。这里面涉及到太多的学科和领域、需要长时间的技术迭代、更必须建立相应的软件生态系统。其产业特性决定了我们需要长期的、持续的高额投入,更要隐忍砸下去的钱仿佛打水漂一般的痛苦——这是一场关乎国运的持久战。

5. 谈笑风生

一个人的命运固然要靠个人的奋斗,但是也要考虑到历史的进程。而历史的进程似乎告诉我,我应该做一点微小的工作,让更多的人了解集成电路。因此我决定搭建本网站,试图用通俗有趣的方式,从几个不同的角度来介绍集成电路的基本原理和知识。由于本人专业知识和所在行业所限,我只能涉及集成电路中数字电路的部分。对于模拟电路、射频电路等等,还望各位另请高明吧~

晓明于2018年上半年,转载请注明出处