两位图灵奖获得者共同发文:计算机构架群雄逐鹿,新的“黄金十年”即将开启

互联网
两位图灵奖获得者共同发文:计算机构架群雄逐鹿,新的“黄金十年”即将开启
麻省理工科技评论 2019-02-03

2019-02-03

在最新一期的 ACM 通讯上(2019 年 2 月刊),2017 年图灵奖获得者 John L. Hennessy 和 David A. Patterson 共同发表了一篇名为《计算机架构的新黄金时代》的文章,这是两人对图灵奖演讲的总结归纳和升华。
人工智能
在最新一期的 ACM 通讯上(2019 年 2 月刊),2017 年图灵奖获得者 John L. Hennessy 和 David A. Patterson 共同发表了一篇名为《计算机架构的新黄金时代》的文章,这是两人对图灵奖演讲的总结归纳和升华。

“计算机架构将迎来新黄金时代,所有计算机架构师都应该感到兴奋!”

在最新一期的 ACM 通讯上(2019 年 2 月刊),2017 年图灵奖获得者 John L. Hennessy 和 David A. Patterson 共同发表了一篇名为《计算机架构的新黄金时代》的文章,这是两人对图灵奖演讲的总结归纳和升华。

他们在文中引用了大量详实数据和资料,梳理出一条计算机架构历史的发展脉络,由此引出目前各种架构群雄逐鹿的盛况。辅以独到和深刻的视角,他们抛出了多个当下值得深思的重要问题和未来可能出现的潜在机遇,最后给出了“计算机架构领域将迎来新的黄金十年”的结论。

图 | 文章截图(来源:ACM通讯)

鉴于原文篇幅较长,我们对其中精化部分进行了编译,整理和概括。全文围绕 3 个核心观点展开:

- 软件的进步会启发架构的创新;

- 硬件 / 软件接口的改进会为架构创新创造更多机遇;

- 市场最终会解决架构之争。

回顾历史:“那些拒绝学习历史的人,将会被迫重蹈历史的覆辙。” —— George Santayana, 1905 年


指令集架构和储存控制器

如今主流计算机由软件和硬件两部分构成,由于编写软硬件所用的语言有本质上的不同,它们之间的交互必须依赖于指令集架构(ISA),例如大家熟知的 x86 和 ARM。简单来说,指令集规定了软硬件之间的沟通规范(语言),依照相同指令集编写的软件,可以在任何支持该指令集的硬件上工作。这大大提升了计算机软硬件之间的兼容性,降低了整体成本。

在 20 世纪 60 年代早期,IBM 拥有四组用途不同的计算机系列,分别面向小企业、大企业、科研机构和实时计算,它们支持的指令集架构各不相同。IBM的工程师认为,有必要将四种指令集统一起来,有效支持所有计算机系列。

受到软件编程的启发,计算机先驱者和图灵奖获得者 Maurice Wilkes 提出了简化控制的想法。他将控制的实现过程视为一个二维数组,并称之为“控制储存器”。二维数组的每一列对应一条控制线,每一行对应一个微指令,编写微指令的过程被称为“微编程”。一个控制储存器包含一个用微指令写成的指令集翻译器,在执行一条传统指令时,只需要将一系列微指令组合起来。相比使用逻辑门,这种方法直接通过内存实现了控制,成本更低。

图 | IBM System/360 系列的四个型号

IBM 看到了微编程的强大之处,相信这种新型指令集将会在计算领域掀起一场革命,最终选择将未来压注其中。事实证明 IBM 不仅主宰了彼时的计算市场,而且在 55 年后的今天,这些大型机的后代,每年仍然可以创造 100 亿美元的营收。

我们不止一次地发现,市场最终成为了判断计算机架构创新成功与否的关键因素,而这些创新通常需要巨大的工程研发投资。

集成电路和 8086

随着时间的推移,越来越多的计算机开始使用集成电路,摩尔定律让内存和控制储存器变得更大,这也意味着更复杂的指令集。

不过在 20 世纪 70 年代,包括英特尔 8080 在内的主流微处理器仍然处于 8 位时代,主要依靠编汇语言编写程序,通过添加新的指令互相竞争。英特尔联合创始人戈登·摩尔(Gordon Moore)相信,英特尔的下一代指令集架构将会一直伴随公司,因此他聘请了大批顶尖计算机科学博士,来研发下一代指令集和处理器——英特尔 8800。

在计划中,新的 8800 处理器将拥有面向对象的架构,支持 32 位寻址,支持可变的指令长度,而且还拥有一套基于最新编程语言 Ada 的操作系统。对于任何一个时代而言,这都是一个野心勃勃的项目,因此它也一再难产。

迫不得已,英特尔只能先组织新的团队,紧急开发名为 8086 的指令集和基于此的 16 位微处理器,以顺应市场。由于时间紧迫,他们只是选择将 8080 处理器的指令集扩展到了16 位,而非重新设计架构。

图 | 英特尔 8086 处理器(来源:Thomas Nguyen/Wiki)

不过造化弄人,8086 发布之时正赶上 IBM 推出个人计算机,为其寻求 16 位处理器之际。IBM 原本相中了摩托罗拉尚未完成的 68000,但是与苹果 Apple II 计算机的竞争迫在眉睫,只能转而与英特尔联手。最终IBM 在 1981 年 8 月 12 日推出了旗下首款个人计算机,风靡全球,出货量高达 1 亿台,为英特尔临危上阵的 8086 铺垫了一个光明的未来。

虽然英特尔的 8800 项目没有因此搁置,而是改名 iAPX-432 继续研发并在 1981 年正式发布,但是由于自身性能问题,8800 处理器亮相 5 年后就匆匆谢幕。相比之下,8086 所用的指令集却沿用到了之后的 32 位 80386 处理器中。

历史用另一种方式证实了摩尔的想法,只不过它选择了 8086,而非 iAPX-432(8800)。这也告诉我们,市场往往缺乏耐心。

从复杂指令集到精简指令集

时间来到了 20 世纪 80 年代初,软硬件交互的巨大进步为架构创新创造了机会。人们发现,连 Unix 这样的操作系统都可以使用高级语言编写,那么当时复杂的编译器是不是可以变得更加简单?

遵循这一思路,图灵奖获得者 John Cocke 为小型计算机发明了更简单的指令架构集和编译器。他和同事发现,如果避开复杂指令,仅使用IBM 360 指令集中的简单指令,比如“寄存器到寄存器”操作和“加载与储存”数据传输,就可以将程序的运行速度提升三倍。

图 | RISC-I 和 MIPS

此后,本文的作者之一 Patterson 受到了激励,开始研发精简指令集架构,以及使用精简指令集的计算机(RISC)。相比使用复杂指令集的计算机(CISC),RISC 的指令通常和微指令一样简单,因此不再需要微代码解释器,而这些解释器占用的内存可以被 RISC 当成高速缓存使用。

在 RISC 诞生之后,还有一些针对指令集的创新诞生,包括超长指令字(VLIW)和显式并行指令计算机(EPIC)。它们都有各自的优点,英特尔与惠普还合作开发了一款基于 EPIC 的 64 位处理器 Itanium,但却受困于较窄的应用范围,比如处理数字信号,无法彻底撼动 x86 的地位。

最终市场再一次失去了耐心,让 x86 的 64 位版本取代了 32 位版本。在 PC 时代,x86 芯片出货量于 2011 年达到顶峰,英特尔和 AMD 共出货 3.5 亿台 x86 微处理器。

不过随着 iPhone 在 2007 年发布,以智能手机厂商为主的后 PC 时代逐渐开始形成。他们重视性能,晶格面积和成本之间的平衡,不再直接购买微处理器,而是在其他公司的芯片上构建自己的SoC 系统,比如使用ARM 的 RISC 处理器。近年来,移动设备出现了爆发式增长,再加上物联网逐渐兴起,RISC的出货量已经飙升至200 亿台。

时至今日,99% 的 32 位和 64 位处理器都是 RISC 架构。可以说,市场解决了 RISC 和 CISC 的竞争。几十年来,新的 CISC 指令集都没有出现,而 RISC 已经成为了通用处理器的最佳指令集架构。

聚焦现在


过去的创新大多集中在指令集架构的设计上,不过大部分架构师并不会设计新的指令集,而是研究如何利用现有技术实现已有的指令集。

自 20 世纪 70 年代末以来,主流技术一直是基于金属氧化物半导体(MOS)的集成电路,包括 n 型金属氧化物半导体 (nMOS) 和互补金属氧化物半导体 (CMOS)。MOS 技术的惊人进步速度,提升了晶体管密度,让架构师能够更好地为特定指令集提升性能。这种规律被摩尔所捕捉,他的摩尔定律预测:晶体管密度将会每两年翻一倍。

摩尔定律和登纳德缩放定律的终结

几十年来,摩尔定律总体来说仍然准确,但其翻倍速度已经在 2000 年左右放缓。随着 CMOS 技术接近极限,预测结果和实际情况之间的差距将继续扩大。

图 | 现实情况与摩尔定律的预测差距越来越大

另一方面,登纳德缩放定律也已经接近失效。该定律指出,随着晶体管密度增加,每个晶体管的功耗会下降,而每平方毫米硅芯片的能耗几乎保持不变。登纳德缩放定律的终结代表,能耗会随着芯片内核数量的增加而上升,这也是当下多核时代带来的能效挑战——每一颗活跃的内核都会消耗能量,无论其是否参与计算,因此大量的能量被浪费了。

这些低效模型限制了性能的提升,想要获得更大的性能提升,我们需要新的架构方法,更有效地使用集成电路。

被忽视的安全问题

在 20 世纪 70 年代,计算机架构师对安全问题十分重视。虽然他们知道是软件引发了大多数错误,但他们相信架构支持可以提供帮助,不过这些想法并未被操作系统采用。软件社区也提出了形式化验证和微内核这样的技术,来构建非常安全的软件,但它们无法跟上处理器的性能发展。

结果就是,大型软件系统不可避免地存在许多安全缺陷。随着云计算大规模应用,安全缺陷的影响被进一步放大了,例如 Meltdown 和 Spectre 这样的安全漏洞带来了新的缺陷,暴露了原本受保护的数据和信息。它们利用的旁路攻击手段最早应用于软件缺陷,并不是新技术。

面对这些,处理器架构师需要重视计算机安全问题,与软件设计者共同合作,重新思考如何正确实现指令集架构,打造更安全的系统,杜绝此类安全漏洞的出现。

展望未来


通用处理器效率不高,摩尔定律和登纳德缩放定律即将终结,处理器架构师似乎失去了性能改进的思路,还有没有其他有效方法?

我们认为,目前有两个很明显的机会,如果把两者结合起来,还能创造出第三个机会。

第一个机会是提升程序的运行性能,有两种潜在的实现方法。

首先,目前软件普遍由具有动态类型和存储管理的高级语言编写,它们的可解释性和执行效率十分低下。例如用 C 语言重写 Python 代码,就可以将矩阵相乘运算的性能提升 47 倍,如果再引入并行循环处理,内存优化以及单指令多数据并行化操作,那么运算执行速度可达 Python 版本的 62000 多倍。这说明,高级语言与传统语言存在巨大差距,前者注重程序员的编程效率,后者更注重程序性能。

图 | Python 和四种优化方式的对比

因此一个有趣的研究方向是,在架构增强的帮助下,探索新的编译器技术来减少两者的性能差距。虽然实现高效编译的难度不低,但收益巨大——只要 25% 的效率提升,就可以让 Python 程序的运行速度提升数百倍。

第二种思路更加以硬件为中心,是设计针对特定领域的架构(DSA)。DSA 是一种专为特定用途定制的可编程处理器,通常是图灵完备的,也被称作加速器,比如针对图像处理的GPU 和针对深度学习的神经网络处理器。

DSA 之所以具备更高的性能,主要有以下四个原因:

1. 利用了特定领域中更高效的并行方式;

2. 更有效地利用了内存层次结构;

3. 在不需要时降低运算精度,提高数据和计算吞吐量;

4. 与领域特定语言(DSL)相结合,编写出的程序运行效率更高。

事实上,DSL 就是我们开头所说的“硬件/软件接口的改进”,是通过架构创新提升性能的优秀范例。我们目前已经拥有很多架构创新,都很有竞争力:

- 英伟达开发的 GPU

- 谷歌开发的 TPU

- 微软开发的,专门用于神经网络的 FPGA

- 英特尔开发的增强版 CPU

在这个时代,我们需要一个懂得垂直整合的团队,从软件程序、DSL 和编译器、计算机架构和底层实现技术等各个方面权衡,最终提供整体优化方案。

图 | TPU 的组织架构组图

受到开源软件的启发,我们认为第二个机会是开放式指令集架构。想要创造处理器领域的 Linux 系统,整个行业需要开放式的指令集架构,这样社区就可以打造开源内核。如果有很多人开始使用相同的开源指令集架构开发处理器,那么这种竞争就会进一步推动创新。

最有名的开源例子是 RISC-V,由加州大学伯克利分校开发。它是一个支持 32 位和 64 位的模块化指令集,开发者可以根据需求选择扩展包,增加或删减增强功能。在 RISC-V 基金会的维护下,整个社区正在不断改进架构。

除此以外,英伟达也在 2017 年宣布了一个免费的开源架构,名为英伟达深度学习加速器(NVDLA)。它是一种可扩展的 DSA,支持机器学习推理。

如果我们结合以上两种思路,再参考敏捷软件的开发原则,就会发现第三个机会——敏捷硬件开发。由于现代电子计算机辅助设计 (ECAD) 工具提高了抽象等级,使得敏捷开发成为可能,而且增加了设计的重复利用性。虽然硬件不能像软件开发那样迅速,但是在特定步骤上,仍然可以实现四周冲刺的高速迭代。

图 | 敏捷硬件开发流程

结语:“黎明前总是最黑暗的。” —— Thomas Fuller, 1650 年


要从历史教训中吸取经验,架构师们必须牢记三个要点:软件创新可以启发架构发展;提升软硬件接口会带来创新机会;市场最终会解决架构之争。

我们相信,标准微处理器性能增幅下降,摩尔定律和登纳德缩放定律的终结,都不是必须解决的问题,它们只是公认的事实,同时带来了惊人的机遇。目前我们拥有的高级语言和 DSA,打破了指令集的枷锁,随着安全问题越来越得到重视,计算机架构师将迎来新的黄金时代。

下一个十年,我们将迎来新计算机架构的“寒武纪”大爆发,对于学术界和工业界的计算机架构师来说,这将是一个激动人心的时代。

麻省理工科技评论

From Tech to Deeptech