关于摩尔定律知识汇总
扫描二维码
随时随地手机看文章
已经稳固运行了 50 年之久的摩尔定律就将迎来终结,但这背后也蕴藏着大量的机会。原文来自 Rodney Brooks 的博客。
摩尔定律到底从何而来
Moore, Gordon E., Cramming more components onto integrated circuits, Electronics, Vol 32, No. 8, April 19, 1965.
Electronics 是一本 1930 年到 1995 年期间出刊的贸易期刊。1965 年,戈登·摩尔(Gordon Moore)发表于上的一篇长达四页半的文章可能是这本期刊最著名的文章了。这篇文章不仅阐明了一个趋势的开始,而且这种趋势逐渐成为一个目标/法则,统治了硅基电路产业(这是我们的世界中每一个数字设备的基础)五十年。摩尔是加州理工学院博士,是 1957 年成立的仙童半导体公司的创始人之一,同时自 1959 年起担任该公司的研发实验室主任。仙童是以制造硅基半导体起家的,当时大多数半导体还是以锗为材料的,这种半导体工艺非常缓慢。
你可以从网络上搜到大量声称其原稿复印件的文件,但是我注意到其中有一些所谓的原稿中的图是重新画上去的,与我一直看到的原稿有些不同。下面我将再现原稿中的两张图表,据我所知,我的这份复制版是该杂志原稿的唯一复制版本,没有手动/人工的痕迹。
首先我要再现的是摩尔定律起源精华。然而,该论文中还有一个同样重要的早期图表,预测可能出现的硅基功能电路的未来产量。它的实际数据比这个少,而且正如我们所看到的,这张图表包含了真实的未来。
这是一张关于集成电路上元件数量的图。集成电路是经由一个类似于印刷的过程生产出来的。光以数种不同的模式打到薄薄的硅晶圆(wafer)上,同时会有不同的气体填充进它的气囊中。不同的气体会在硅晶圆表面引起不同的光致化学反应,有时会沉积某些类型的材料,有时会腐蚀材料。有了能塑造光线的精确光掩模(mask),精确控制好温度和曝光时间,就能打印出一个二维电路。该电路上有晶体管、电阻和其它元件。其中很多可能是在单个晶圆上一次成型的,就像许多字母在一页纸上一次性印刷一样。在任意一个做好的晶圆上电路上,其良率是质量合格的芯片占一个晶圆上芯片总数的比例。然后这块硅晶圆会被切成几块,每一块上都包含了一个芯片,而且每一个电路都放在自己的塑料封装中,只露出几只小「腿」作为连接线,如果你观察一张过去四十年里芯片版图,你会上面充满了大量的集成电路。
单个集成电路中的元件数量很重要。既然集成芯片是打印出来的,过程中就没有人工的痕迹,这不同于早期的电子产品,其中的每个元件都需要手工放置和添加。现在一个包含了多个集成电路的复杂电路仅需要手工组装这些集成芯片就可以了,而且后来这道工序也很大程度上了。只要有一个良率不错的生产过程,那么造出一块单个集成芯片的时间就是恒定的,不管组件的数量是多少。这意味着总共需要手工或者机器连接的集成芯片数量较少。所以,就像摩尔那篇论文的标题所说,把更多的元件集成到一个单个集成芯片上是一个很好的主意。
该图竖轴表示的是一块集成芯片上的组件数的以 2 为底的对数,横轴表示的是年份。左起一直向上延伸的每一个缺口都会将元件的数量增加一倍。所以 3 指的是 2 的三次方,等于 8,13 指的是 2 的 13 次方,等于 18192。从 1962 年到 1972 年,元件数量增加了 1000 倍。
这里有两件事需要注意
第一是摩尔这里讨论的是一块集成电路上的元件,不仅仅是晶体管的数量。一般来说元件的数量比晶体管要多出很多,虽然这一比率会因为使用不同基本类型的晶体管而随着时间的推移下降。但在后来的几年里,摩尔定律经常变成纯粹的晶体管计数。
另一件事是 1965 年发表这张图中只有四个真实的数据点。而在 1959 年组件的数量是 2 的零次方,也就是 1,根本算不上是一块集成电路,因为那只是单个电路元件——那时集成芯片尚未发明。所以这是一个空数据点。之后他绘制了四个实际数据点,我们假设是从仙童公司可能产生的数据中采集的。1962、1963、1964、1965 这四个年份对应的数据点分别是 8、16、32 和 64。
这里面的机制是什么,它怎么能起作用的?它能起作用是因为它在数字域中,也就是 yes 或 no 的域,0 或 1 的域。
在这篇四页半页的文章的后半页,摩尔解释了他的预言的局限性。他说对于一些东西,如储能,他预测的趋势就不起作用。能量占用一定数量的原子和电子来储存一定数量的能量,所以你不仅不能随便改变原子的个数还需要存储相同量的能量。同样,如果你有一个半加仑的牛奶容器,你不能在里面放一加仑牛奶。
然而基本的数字抽象是 yes 或者 no。集成芯片中的电路元件只需要知道先前的元件是 yes 还是 no,不管是否存在电压或电流。在设计阶段一决定多少伏特或安培以上为 yes,多少以下为 no。这些数字之间需要有一个很好的分割,区分出一个显著的中间区域与最大值区域或最小值区域。但是区域的幅度不会有什么影响。
我喜欢把它想象成一堆沙子。桌子上有或没有一堆沙子?或许我们需要确定一下大概多少沙子才能算得上是一堆沙子。但是正常情况下,把一堆沙子减半,我们仍然可以说桌子上有一堆沙子。
然后我们能再次将这个数量减半。并且,yes 或 no 的数字抽象依然可以起作用。我们还可以再减半,同样没问题。就这样,一次一次一次减半下去。
这就是摩尔定律的原理,最初的定理是这样描述的:我们将会看到集成芯片上的元件数量每年增加一倍,从 1965 年到 1975 年持续 10 年。
其他版本的摩尔定律接踵而至;这些定律都是关于翻倍的,但是有时翻倍的是其他东西,并且翻倍需要的时间常数会稍长。最流行的版本是晶体管数翻倍、晶体管的开关速度翻倍、单个芯片上的存储空间翻一倍、计算机的二级内存翻一倍——其最初是在机械磁盘上,但是最近五年已经升级成固态闪存的形式。还有很多其他的版本。
让我们暂时回到最初版的摩尔定律。一块集成芯片上的元件是分布在一块二维硅晶圆上的。因此,为了使相同数量的硅的数量增加一倍,就需要将每单位面积的元件数量增加一倍。那就意味着一个元件的大小,在硅晶圆的每一个线性维度上要降低到原来的二分之一。反过来,那就是说,摩尔知道每个元件的线性维度会逐年下降 71%。
但是为什么会限制在每年两倍的数量上?考虑一下上面提到的沙堆模拟,为什么不能是四分之一或者十六分之一堆的沙子作为基数呢?当你缩小元件的尺寸(通常称为 feature size,特征尺寸)时,问题就又回到某个集成芯片的良率上,也就是合格集成芯片的数量。随着特征尺寸越来越小,芯片制作过程中广每一步的光的投射模式的对准需要更加精确。因为√2=1.41,当你将特征尺寸减半才能得到更好的良率。而且因为材料中的杂质也会被带到芯片中,从循环中的气体中而来并且经过光化学反应的材料,因此气体必须是高纯度的,这样每个元件中的留存的坏原子才会更少。摩尔定律最初的版本中隐晦提到生产设备有望在下面的 10 年中,每年提升 29%。
在后来多种版本的摩尔定律中,翻倍的时间常数延伸到 2 年,甚至还要长一点。但是处理设备会在每个周期提升 29%。
要见识摩尔定律原理的魔力,让我们先来看看 25 次翻倍。该设备必须用比它小√2 的 25 次方倍的东西操作,即,大约小 5793 倍。然而我们可以在单个芯片上安装 2 的 25 次方个组件,其数量可以达到 33,554,432 倍之多。我们设备的精确度已经提升了 5793 倍,但是,由于线性对区域的影响,在原来 5793 倍的基础上,这一数字进一步加速了 5793 倍。这就是摩尔定律收益的来源。
Moore 只是在最初的论文中隐晦地提出了这一定律,设备在接下来十年内逐年得到 29% 的提升。事实上,翻倍所用的时间常数会更长。
现在终于到头了。并不是因为设备良率的精确度不再提升了。不是的。而是因为我们拿来做比喻的沙堆变得小到里面只有一粒沙子了。
戈登·摩尔令人难以置信的洞察力
或许让人印象最深刻的是摩尔对该定律对世界产生的巨大影响的远见。下面是他文章中的第二段的第一句话:集成芯片会带来很多令人惊讶的技术,比如家用计算机,或者至少是终端连接在中央自动计算控制中心上的计算机,以及个人便携式通讯设备。
摩尔提到的这些东西在 1965 年都算的上惊世骇俗。当时所谓的「微型计算机」还是桌子那么大的,用起来通常还要接一些外围设备,如磁带机、读卡器或打印机,这样的机器是很难进入日常家用厨房的,即便是把冰箱、烤箱和水池都扔出去,也很难放得下它。当时的绝大多数人还没有见过计算机,跟计算机互动过的人就更少了。而且通常情况下,使用这种设备的人需要把打孔卡片一张张拆开,然后当人把卡片都放入机器后,一天以后才能打印好。
以今天的标准来看,当时汽车电子系统非常简单,大约只有 6 个开关,若干个简单机电装置驱动转向指示,有挡风玻璃雨刮器,「分电盘」定时点燃火花塞——在自动电子设备中每一个单独的功能产生的丝毫机械都能大到用肉眼看见。当时的个人沟通设备还是转盘拨号电话机,一个家庭一部,牢牢地固定在墙上。
顺便提一下,集成芯片做成的第一台计算机是用于阿波罗任务的制导系统计算机,命令模块(Command Module)中一台,月球登陆器(Lunar Lander)上一台。这些集成芯片都是由戈登·摩尔的仙童半导体公司制造的。第一版的计算机上有 4100 个集成电路,每一块都有一个 3 输入或非门(NOR gate)。1968 年第一台功能更强大的载人飞行器仅有 2800 块集成芯片,每块芯片上有两个 3 输入或非门。摩尔定律在初具成形时就已经开始影响月球了。
一点题外话
原版的杂志文章中有这么一个漫画:
在摩尔定律 40 周年庆上,我问摩尔博士这幅漫画是不是出自他自己的创意。他回答说此事与他无关,文章中出现这个卡通也让他很吃惊。
我找不到关于这幅漫画来源的丝毫线索,我猜想是这幅漫画的作者可能对我上面引用的这句话有些不满。漫画中的场景设在一个百货商店中,当时美国百货公司通常有一个「Notions」柜台区,我自己没有去过这样的地方,因为现在已经没有了(我是 1977 年到的美国)。看起来,Notions 像是卖服饰用品的,比如一些用于缝纫的徽章、棉线、彩带等常用品。另一边是化妆品专柜。而这两个专柜的中间是便携式家用电脑专柜,售货员手里正拿着一台电脑。
我猜这位漫画家是想借此取笑摩尔的那个想法,试图指出它的荒谬。然而 25 年后一切都过去了,当时百货店里卖的东西也烟消云散了。买化妆品的专柜还在那里,notions 的柜台早已不见踪影。这位漫画家只看到了他眼前的东西,却看不见未来的趋势。
摩尔定律中有很多不同的形式,不只是他最初提出的单个芯片上的元件数量。
在摩尔定律中,关于芯片运行速度有多快的说法有很多版本,其中一个是,晶体管越小,开关的速度越慢。同时关于 RAM存储量运行计算机的主内存有多少。还有关于文件存储和磁盘驱动大小和速度也有多个版本。
多个摩尔定律混在一起对技术如何发展产生了巨大的影响。我会讨论这种影响的三种模式:计算机设计中的竞争、协调和从众现象。
竞争
内存芯片是数据和程序运行时的存储位置。摩尔定律适用于单个芯片可以存储的内存字节数,字节数通常是定期地四倍数的增长。因为是四倍的增长,所以硅晶圆代工厂的成本就会长时间内下降,这样一来可以保持盈利了(今天,一家硅晶圆代工厂的资本成本大约是 70 亿美元!),此外还需要将每个 memory cell 在每个维度上增加一倍,以保证设计的平衡,因此这就又增加了四倍。
在早期的台式电脑的内存芯片中 2 的 14 次方(16384)个字节,当时的内存芯片是 RAM(随机存取存储器,即内存中的任何位置都需要同样长的访问时间,没有快慢之分),而且这样大小的芯片被称为 16K 芯片,K 不是整好的 1000,而是 1024(即 2 的 10 次方)。很多公司都生产过 16K 的 RAM 芯片。但是他们从摩尔定律中学到的唯一一样东西就是市场上何时有望出现 64K RAM 的芯片何时会出现。所以他们也了解自己必须要做什么才能保持竞争优势,他们也知道何时需要做好供工程师设计新机器的样品。他们会早早准备好芯片只要新机器一出来,就等着设计安装上去。他们还能判断出在什么时间值得需要付出什么样的代价以在竞争中保持一点领先优势。每家公司都了解这个游戏(事实上,关于摩尔定律的时钟什么时候需要调慢一些,他们已经达成了一致),他们竞争的是作战效率。
协作
MIT科技评论曾经发文谈论过摩尔定律的终结。如果你是一名设计师,要为台式机器设计一个新的计算机机箱,或者其他类似的数字机器,你可以调查一下打入计算机市场的某个好时机,了解各种大小的 RAM 内存所需要的电路板空间有多大,因为你已经知道了每个芯片有多少字节空间可用。你知道了磁盘空间的大小与其价格和尺寸的关系(磁盘直径的大小会随着其存储总量的提高而提高。)你会清楚最新的处理器芯片的运行速度会有多快。你会知道各种分辨率的显示器的价格。所以,当你打算向市场投放新型计算机时,你可以提前几年结合这些数字了解什么样的选择和配置是有潜力的。
销售此款计算机的公司或许可以造出一两个关键芯片,但是大部分元件还得从供应商那里买。摩尔定律的周期性能让他们不用担心会突然出现一个颠覆性产品而打乱自己的业务流程和计划。这才是让数字革命按部就班继续下去的根源所在。每件事都是有顺序可以预测的,所以很少遇到盲阱。在整个人类历史上的任何技术领域,我们或许拥有了一个持续性和可预测性最强的进步通道。
计算机设计中的从众心理
但是这种好处带来的一些影响也可以被看做是负面的(尽管我相信有人会争辩说其好处是不折不扣的)。我将把其中之一作为讨论摩尔定律所深刻影响的第三件事情。
当中央处理器能够被置于一张芯片(见下面的英特尔 4004)中时,通用计算机设计的一个特定形式出现了,很快,芯片上的这些处理器(即众所周知的微处理器)就可以支持通用架构,即冯诺依曼架构 。
这种架构的一个显着特点是:有一个很大的 RAM 内存包含着 RAM 芯片中产生的指令和数据,我们在上文谈到了这个内容。内存被组织成可进行连续索引(或寻址)的位置区域,每个位置都包含同一数量的二进制比特信息或数字。微处理器本身有一些专门的存储单元(称为寄存器/ registers)和一个可进行加、乘、(最近出现的)除运算的运算单元等。其中一种专门的寄存器被称为程序计数器(Program Counter/PC),它为当前指令保留内存中的一个地址。CPU 在当前的指令位置上查看比特信息的模式并将其解码成所应执行的操作。这个行为可能是为了取回 RAM 中的另一个位置,并将其放进某个专门的寄存器中(这个过程称为负载/LOAD),或是为了将内容发送到其他方向(STORE),或是为了将两个特殊寄存器中的内容输送到运算单元中,接着对该单元的输出数据求和,将其存储在另一个专门的寄存器中。然后中央处理单元增加其 PC 的数量并查看下一个连续寻址指令。一些特殊指令可以改变 PC 并使机器转去执行程序的其他部分,这个就是分支(branching)。例如,对于存储在 RAM 中的某个连续值数组,如果其中一个专门的寄存器被用来计数其求和元素的数量,那么紧跟在加法指令后面的就有可能是一条递减计数寄存器的指令,然后在程序早期进行合并,执行另一个负载,如果该计数寄存器仍然大于零就进行添加。
绝大多数数字计算机都是这样。其余例外都只是黑客们使其运行得更快,但本质上仍然与此模型类似。不过请注意,冯诺依曼计算机以两种方式使用 RAM——用以包含程序中的数据以及包含程序本身。我们稍后再谈这一点。
由于摩尔定律的所有版本都在坚定地运作以支持这个基本模型,要想打破它十分困难。人类的大脑肯定不会这样工作,所以似乎存在其它一些强大的方法来组织计算。但是试图改变基本组织是一件危险的事情,因为基于现有架构的摩尔定律将势不可挡地继续运作下去。尝试新事物最有可能使发展倒退几年。因此,诸如来自 MIT 人工智能实验室(变成了至少三个不同的公司)的 Lisp Machine 或 Connection Machine 和日本第五代计算机计划(其研究了两种非常规的思想:数据流/ data flow 和逻辑推理/logical inference)等勇敢的大规模实验都失败了,因为之前长时间的摩尔定律效应使传统计算机的性能翻了一番又一番,其效果超越了新机器的诸多高级功能,而软件却可以更好地模拟新思路。
大多数计算机架构师被锁在了已存在了几十年的传统计算机组织中。他们竞相改变指令的编码,使程序在每平方毫米上的执行效率略高一点。他们竞相更改策略,以求在主处理器芯片上缓存更大、更多的 RAM 内存副本。他们竞相探讨如何在一张芯片上放置多个处理器、如何在一张同时运行有多个处理器单元的芯片上共享 RAM 中的缓存信息。他们竞相研究如何使硬件在运行着的程序中更好地预测未来决策,从而可以在白费心机之前预先进行下一个计算。但是基本上,他们都被锁在了计算的同一种方式上。三十年前,有几十种详细的处理器设计,但现在只有少数几个类别:X86、ARM 和 PowerPC。X86 大多是台式机、笔记本电脑和云服务器。ARM 多用于手机和平板电脑。你可能会用一个 PowerPC 来调整汽车的所有引擎参数。
图形处理单元(Graphical Processing Units/GPU)是打破摩尔定律枷锁的一个引人注目的例外。 它们不同于冯诺依曼机。为了获得(特别是在游戏中)更好的视频图像性能,摩尔定律主导下的主处理器已变得越来越好,但是底层模拟也在变得越来越好,这并不足以提高实时渲染的效果。这种情况催生了一种新型的处理器。它对于通用计算不是特别有用,但是在(进行屏幕上的图形化渲染所需要的)数据流的加法和乘法运算方面被优化得很好。至此,一个新型的芯片被添加到摩尔定律池中,远远晚于传统的微处理器、RAM 和磁盘。新的 GPU 没有取代现有的处理器,而是作为图形渲染所需要的合作伙伴被添加进来。我在这里提到 GPU 是因为原来它们对另一种类型的计算(在过去三年中已经变得非常流行)很有用处,这正成为摩尔定律还未结束的一个论点。我仍然认为它会终结,下一节将回到 GPU 的话题。
我们确定它会结束吗?
如前所述,我们将一堆沙子分成两半,却没法再分那最后一粒,这就是目前的境况,我们面对的是一粒沙子,传统意义上的戈登·摩尔定律已经结束了。
前面我谈到了集成电路的特征尺寸(feature size)及其密度变化。1971 年,戈登·摩尔在英特尔,他们推出了其第一个单芯片微处理器 4004 ——12 平方毫米大小的芯片上分布有 2300 个晶体管,特征尺寸为 10μm。这意味着该芯片上任何组件的最小可分辨尺寸是千分之一毫米。
此后,特征尺寸有规律地降低,一定面积上的组件数量定期翻一番。尽管该期限正在逐渐延长。在摩尔最初发表该定律的年代,芯片革新周期是一年。现在是两年多一点。在 2017 的第一季度,我们期望在大众市场上看到第一款特征尺寸为 10nm 的商用芯片产品,连 1971 年的千分之一都不到,或者说它是摩尔定律 46 年来生效了 20 次的成果。有时技术飞跃得比以往更快一些,因此 10 μm 到 10nm 之间实际上只有 17 次飞跃。你可以在维基百科上查看详细内容 。2012 年时特征尺寸是 22nm,2014 年是 14nm,现在到了 2017 年的第一个季度,我们将会看到 10nm 特征尺寸的芯片被送到终端用户手中,并有望于 2019 年左右看到 7nm 的产品问世。仍有一些活跃的研究领域致力于解决 7nm 特征尺寸的难题,不过业界却对此信心十足。有预言说 2021 年会突破 5nm,然而就在一年前,能否解决与此相关的工程问题及其在各行业中的经济可行性如何还存有很大的不确定性。
5nm 只有大约 20 个硅原子的大小。如果再小的话,该种材料就会受到量子效应的主导,经典物理学性质则会开始坍缩。这就是我所说的沙堆只剩一粒沙子的情况。
今天的微处理器有一张几百平方毫米大小的芯片和 50 亿到 100 亿个晶体管。如今它们有很多额外的电路用以缓存 RAM、预测分支等,从而达到提高性能的目的。然而越来越大的尺寸在变得更快的同时也带来了很多成本。众多信号于转换过程中所使用的能量在很短的时间内会散发出一些热量,而一个信号从芯片一边转移到另一边的时间最终会受限于光速(实际上光在铜介质中的速度会小一些),因而该时间效应开始变得显著起来。光速大约是 30 万 km/s,或 3×10^11mm/s。因此光(或信号)在不超过 1×10^(-10)s 的时间内可以传播 30 mm(一英寸多点,和今天的一个大芯片的尺寸差不多),这个时间不低于一百亿分之一秒。
当前最快的处理器的时钟速度是 8.760 GHz,这意味着在信号从芯片的一边传播至另一边的时间内,芯片的这一边已经开始转移下一个信号了。这使得单芯片微处理器的同步性成为了一个噩梦,而一个设计师充其量只能提前知道来自处理器不同部分的不同信号会迟到多久,并相应地尝试进行设计。所以与其把时钟速度加快(这也很难),不如将单芯片微处理器做得更大、加上更多晶体管,让它在每个时钟周期内做更多事情,在过去的几年里,我们已经看到大尺寸芯片朝着「多核(multicore)」方向发展,一片芯片上有着 2、4 或 8 个独立的微处理器。
多核保存了「每秒执行的操作数」(摩尔定律的说法),但是该过程牺牲了简单程序的同等程度的加速执行性能——你不能简单地在多个处理单元上同时运行某一个单一的程序。对于试图同时运行很多任务的笔记本电脑或者智能手机来说,这种牺牲影响不大,因为通常会有足够多需要立即完成的不同任务被分包给同一芯片上的不同内核,从而使其得到充分利用。但是除了用于特殊计算的任务,当核数量增加几倍时情况就不同了。在芯片被闲置时,加速便开始消失,因为没有足够多的不同任务需要被执行。
尽管我在上文中提出了为什么摩尔定律将会终结于芯片的相关论据,仍然有许多人表示不认同,因为我们打算通过多核和 GPU 来找到少数原子约束问题的解决方法。但我认为这大大改变了定义内容。
这是 DFJ (Draper Fisher Jurvetson)投资公司的创始人 Steve Jurvetson 最近发表在其 Facebook 主页上的一张图表。他说这是由 Ray Kurzweil 编写的对早期图表的一个更新。
图表左轴是每秒每单位美元的计算次数(以对数标度)。它代表了计算随时间推移的价格下降指数。20 世纪 40 年代有一些特殊用途的计算机,比如布莱切利园(Bletchley Park,又称 X 电台)为破译密码而建造的电磁计算机,它到了 50 年代就成为了通用型的冯诺依曼计算机并一直保持到了图表最后的几个时间点。
图中的最后两个点都要归功于 GPU :GTX 450 和 NVIDIA Titan X。Steve 没有标记出其之前的几个点,但是在我能搜索到的(有很多)每一张早期版本的图表中,2010 年后的点都要归功于多核。首先是双核,然后是四核,比如英特尔四核 i7 处理器。
GPU 之所以存在以及人们对它感到兴奋的原因是:除了图形处理,它们在另一个时髦的计算领域也表现不凡——深度学习——一个最初被称为反向传播神经网络的东西——最近在技术领域产生了巨大的影响。它使得语音识别技术在过去三年间取得了飞快发展,从而令苹果的 Siri、亚马逊的 Echo 和 Google Home 成为了实用且令人满意的程序和设备。它也使得图像标记的质量比 5 年前提高了一大截,还有自动驾驶汽车的一部分态势感知实验,使用了众多的道路场景来训练网络。深度学习的训练阶段通常是在云端的数百万个样本之上进行的。它产生了几百万个数字,代表着所习得的网络。然后当它在识别一个单词或标记一张图像时,输入数据会被送入某个程序,执行数百万个乘法和加法运算从而触发该网络的生成。巧合的是,GPU 只有在网络以这种方式被构建的情况下才能达到最优的性能,所以我们预计会有更多网络被纳入到我们的汽车中。GPU 制造商的春天来了!而 GPU 可以做庞大计算的这种能力在任何问题上都表现欠佳。但它们在深度学习网络方面表现优异,而深度学习正迅速成为这十年的技术发力点。
我们确定无疑地声称着会继续看到指数式增长之时(如图),正是被测量量已经发生改变之时。这有点像是在变戏法。
我认为这种变化会产生非常大的影响。
摩尔定律的终结意味着什么?
我认为摩尔定律的终结——正如我对终结的定义——将会带来计算机架构的一个崭新的黄金纪元。架构师们不用再畏缩于摩尔定律的恶性竞争中。他们将能花时间去尝试一些芯片方面的新想法,因为现在的传统计算机架构将无法在短短两年或四年内跟上软件迭代的步伐。而且他们可能不会尝试去提高计算速度,或许是以其它方式来改善计算。
机器学习运行时间
我们已经看到使用用于深度学习网络的 GPU 作为运行时间的引擎。但我们也看到一些更具体的架构。例如,距离谷歌拥有自己的 TensorFlow Units(TPU) 芯片已经过去了一年左右的时间了,该芯片通过有效降低(由于神经网络在低精度时表现相当良好而保留下来的)重要数字的数量来为深度学习网络节约功率。谷歌已经把许多这种计算机中使用的芯片安装在其服务器集群或云端上,并能够将学习后的网络用于各种搜索查询任务,它的速度更快且电力消耗更低。
专用芯片
现在一张典型的手机芯片有四个 ARM 处理器内核以及一些高度优化的特殊用途的处理器。这些处理器管理着摄像头的数据流入并优化语音质量,甚至在一些芯片上有一个特殊的高度优化过的处理器用于检测人脸。这是相机应用程序中所使用的处理器——你在拍照时可能注意到了人脸周围的小矩形——用来决定图像的哪些区域应该被重点关注并提供最好的曝光时间——当然是脸!
通用用途的新方式
我们已经看到为特定计算所设计的特殊用途架构的崛起。但也许还会看到更多通用架构以一种不同的计算风格奋起直追。
可以想见,现在或许值得再次对日本第五代计算机计划的数据流和逻辑模型进行探讨。但是当我们把世界数字化时,有害的计算机安全的成本将威胁到我们的生存。因此如果事情进展不错,或许被(摩尔定律的恶性竞争)释放出来的计算机架构师们可以慢慢开始将我们从目前的糟糕状况中拯救出来。
安全计算
我们都听说过网络黑客攻破计算机的事情,他们往往在地球的另一边,或者是彼时还在一台计算机上控制着引擎,而很快就开始控制其他的东西,比如一辆驶过的汽车。这是怎样发生的呢?
网络黑客很有创造力,但他们进入系统的许多方法基本上是借由程序中的一些常见的编程错误,这些程序建立在我们之前谈过的冯诺依曼架构之上。
一个常见的手法是利用所谓的「缓存溢出(Buffer overflow)」。保留一个固定大小的内存,例如输入到浏览器或谷歌查询框中的网页地址。如果所有程序员的代码都写得非常仔细,而有人键入了过多的字符,那么其超出限制的部分将不会被存储在 RAM 中。但通常情况是,一个程序员使用了一种简单而快速的编码技巧,这种方式不检查溢出,且键入字符以超出缓冲区范围的方式被保存起来,它或许会覆盖一些代码而使该程序跳到后方。这取决于冯诺依曼架构的特点——数据和程序存储在同一个内存中。所以,如果黑客选择了一些字符,其二进制码对应于一些恶意行为的指令,比如为自己建立一个使用特定密码的帐户,然后一切就像施了魔法般,黑客有了一个(类似许多其他人和程序服务可能会拥有的)计算机远程访问帐户。程序员不应该犯这种错误,但历史表明这种情况一次又一次地发生着。
另一种常见的手法是:在现代网页服务中,笔记本电脑、平板电脑或智能手机上的浏览器以及云中的计算机,它们有时需要在彼此之间传递一些十分复杂的东西。无需程序员事先了解所有复杂的可能情况并处理消息,其设置方式是:使一方或双方可以来回传递一点程序源码并在其他计算机上执行代码。这种方式提供了在现有系统中推迟工作而无需更新应用程序的强大性能。无法确定一段代码不会去做某些事情,所以如果该程序员决定通过这一机制提供一个完全通用的性能,那么接收机便无法提前知晓代码的安全与否以及它们是否会做一些恶意行为(这是停机问题的一般化——我可以继续进行下去...但不会)。所以有时网络黑客会利用这个弱点,并直接向一些接受代码的服务发送一点恶意代码。
除此之外,网络黑客总在发明新招——以上两例只是用来说明黑客当下的一些行为方式。
可以编写代码来防止这些问题,但是代码编写仍然是一项人为活动,而世界上存在太多人为创建的漏洞。一个应对方法是使用额外的芯片,该芯片对程序员隐藏了低层次的冯诺依曼架构的可能性,仅仅向内存中的指令提供更有限的可能行为集合。
这不是一个新想法。大多数微处理器有一些版本的「保护环(protection rings)」,这些保护环可以让更多不受信任的代码仅能访问越来越有限的内存区域,即使它们试图以正常的指令来进行访问。这种想法已经存在了很长一段时间,但它一直受阻于缺少一个标准的方法去使用或执行它,所以大多数试图运行于大多数机器上的软件,通常仅仅指定 2~3 个保护环。这是一个非常粗糙的工具,它放过了太多的代码。当仅仅追求速度已变得不再实用时,也许现在可以更认真地思考一下这个想法,尝试让环境变得更加安全。
另一个想法——主要只在软件中实现过,可能有 1、2 个例外——被称为基于功能的安全(capability based security),来源于基于功能的寻址( capability based addressing)这个概念。程序不能直接访问所需使用的存储器区域,但能获得不可伪造的参考加密处理,以及一个被定义的、被允许作用于内存的操作的子集。现在硬件架构师或许有时间来继续推动该方法的完全强制性执行,使其在硬件方面成功一次,因而纯粹的人类程序员——他们被要求在承诺的发布期限内实现新软件——就不会把事情搞砸了。
从某个角度来看,我前面谈到的 Lisp 机是建立在一个非常具体而有限的、基于架构的性能的版本之上。实际情况是,那些机器是冯诺依曼机,但是它们可执行的指令是受到故意限制的。在硬件层面,通过使用被称为「类型指针(typed pointers)」的东西,对每一个内存的每一次引用,都会根据指针中所编码的类型来限制指令对内存的作用。而内存只能在其被存储时通过一个指针被引用到一个固定大小的内存块的起点。因此,在缓冲区溢出的情况下,一个字符串的缓冲区将不允许数据的写入或读取超出其范围。而指令只能从另一类型的指针——一个代码指针——中引用。硬件运用存储时被授予的指针类型来将通用用途内存分成一个个十分细小的区域。粗略地讲,指针的类型永远不能被被变,RAM 中的实际地址也不可能被任何可访问指针的指令看到。
如何通过使用这种对通用用途的冯诺依曼架构的硬件限制来提高安全性——这些想法已经出现了很长一段时间。我在这里谈过其中的几个想法。现在我认为它会成为一个更加吸引硬件架构师去投入精力的领域,因为我们的计算系统的安全成为了保证我们的企业、生活、社会能够顺利运行的一个主要的致命弱点。
量子计算机
目前量子计算机是一个以实验性为主且花费高昂的技术。由于需要将它们冷却到物理实验级别的超冷温度且费用不菲,因此对于人们的一些困惑——它们可能会为传统的基于计算机的芯片带来多少加速,以及它们针对的是什么类型的问题——来说,目前量子计算机是一项投资大、风险高的研究课题。我不会去考虑所有的参数(我没有读过所有的参数,坦白说我也不具备使我对自己可能构建出的任何观点都感到自信的专业知识)但是 Scott Aaronson 有关计算复杂性和量子计算的博客对感兴趣的人来说可能是最好的参考来源。已经实现或被期望实现的对实际问题的加速宣言,其范围从 一 倍到几千倍(可能我所知道的这个上限有误)不等。在过去,只要等上 10 年或 20 年的时间,就可以让摩尔定律带你到达目的地。我们反倒已经看到了对某项技术长达超过 10 年的持续性投资,人们仍然在争论该技术是否凑效。对我来说,这也进一步说明,摩尔定律的终结正在鼓励新的投资和新的探索。
无法想象的东西
即使在摩尔定律的终结所触发的各种创新包围下,或许我们所能看到的最好的事物还不在人类的共同意识中。我认为,在没有摩尔定律悬置的情况下,创新自由、需要时间来研究好奇领域的自由,很可能会产生计算模型方面的一个新的伊甸园。5 至 10 年后,我们可能会在传统的(不是量子)芯片中看到一种全新的计算机组织形式,其速度会超出目前的想象。再往后发展 30 年,这些芯片可能会做出一些在今天看来与魔术并无区别的事情,就像今天的智能手机对 50年前的我来说近乎天方夜谭。