2018 年3月21 日,ACM任命John M. HennessyDavid A. Patterson获得2017年ACM图灵奖,以奖励其开创系统的定量的方法来设计和评估计算机体系结构,该方法对微处理器行业产生了持久而深远的影响。获奖者在ISCA-2018举办了图灵讲座——计算机体系结构的黄金时代:领域专用的软硬体协同设计、增强安全性、开放的指令集以及敏捷晶元开发。以下为本次讲座的内容。

我们将在第一部分介绍计算机体系结构的历史,这一部分将花费20分钟左右,由我(Davide Patterson)来主讲。John(John Hennessy)将在第二部分介绍我们这一领域正面临的一些挑战。我们两人将一起介绍第三部分,他介绍领域专用架构,我介绍开放架构以及敏捷硬体开发。

OK,让我们回到50年前。在20世纪60年代早期,IBM遇到了一个问题。IBM拥有四条互不兼容的计算机产品线,因为不兼容,他们的指令集是不同的,软体栈是不同的,操作系统是不同的,IO是不同的,甚至市场也是不同。因此,IBM的工程师产生了一个想法,他们押注,公司将开发一套统一的指令集,这套指令集能够兼容所有四个独立的产品线。

这一问题中最困难的部分是控制。Maurice Wilkes提出了一个想法,是关于如何简单的进行控制的,他是第二个获得图灵奖的人,也是从我们这里领域获奖的第一人,他的这一想法被称为微编程(microprogramming)。由于当时硬体逻辑比ROM和RAM更贵,但是ROM比RAM便宜一些而且速度更快,因此我们将控制逻辑特化为只读存储,并将控制器中的每一个字称为微指令。IBM当时准备使用微编程技术来解决兼容性问题。

在1964年4月,IBM做出了公司历史上最重大的声明。这里有四种不同机器的例子,从表中我们可以看到,数据通路从8位到64位,对应的微指令从50位到87位。所以那时的微代码(microcode),硬体越宽,微指令越宽,也就不需要采用更多的周期来执行,所以微代码更短,这种方法被称为水平微指令。左边的例子是50比特,但是微代码更长,因为它花费了更多的时钟周期来执行,所以这种方法被称为垂直微指令。如果以现在的美元计价,左边的例子花费150万美元,右边的例子花费800万美元。最终那些工程师赢了,IBM在大型机计算行业占据了主导地位,这套指令集直到今天仍然可用并且主导著大型计算机。第二个从计算机体系结构方向获得图灵奖的人Fred Brooks在这项工作中起到了重要的作用。

随著摩尔定律以及半导体技术的到来,在微型计算机领域中,运算逻辑、RAM以及ROM均采用相同的晶体管来实现,因此RAM具有了与ROM相同的速度。随著摩尔定律,我们可以拥有更大的控制存储,并且由于RAM,我们可以修改微代码中的bug,最终这导致了更加复杂的指令集的出现,经典的例子是DEC的VAX指令集,我们可以看到它具有96位宽,5000微指令。

这时有人提出了一个想法。因为微代码是在RAM中,所以被称作可写控制存储。因为它是可变的,不仅可以执行标准的指令集,还可以在可写控制存储中根据应用程序进行定制。因此微编程在学术界变得非常流行。当我还是研究生时,我的博士论文就是这一领域,我的第一篇论文投在SIGMICRO,SIGMICRO实际上就是the International Workshop of Microprogramming,后来它改变了自己的目标领域,不过最初是关于微编程的。现在可以确定的是,最著名的使用可写控制存储的计算机是Xerox Alto,于1973年制造。它产生了很多今天仍在使用的想法,他是第一台具有图形用户界面的电脑,第一台具有乙太网的电脑,这些全都以微代码的形式写进了可写控制存储中。这里有一张Alto的图片。第三个从计算机体系结构方向获得图灵奖的科学家是Chuck Thacker,对Alto做出了重要的贡献。

从现在来讲,微处理器(microprocessors)是落后于时代的。微处理器跟随大型机的发展路线,凭借MOS技术迅速发展,但是只是模仿大型计算机所做的事情。设计者会进行处理器大战,因为用户在使用汇编语言,设计者将在来回的反击中发明新的指令。现在确定的是,整个20世纪70年代中,我认为最具有野心的微处理器是432。以摩尔定律闻名的Gordon Moore是一位有远见的人,他看好他们(Intel)拥有的8位8080微处理器,认为应该在此基础上改进,直到它能持续下去。因此Moore雇佣了一批计算机科学的博士,将他们送到俄勒冈州发明下一代指令集,这是一个非常有雄心的计划。在那个时代,他们研发出了32位面向对象的体系结构,它有一个使用外来编程语言编写的操作系统,虽然想法很巨大,但是他们是落后的。它不适合单个晶元,分散在几个晶元上,具有性能问题和可用性问题。因此在俄勒冈的人不得不告诉Gordon Moore,他们不能及时完成工作。Gordon Moore启动了一个补救项目。它被称作8086,整个团队拥有52周来升级一个权宜之计的16位处理器,在52周内完成指令集、架构、晶元等所有事情。他们花费了三周的时间来设计指令集,并且做到了这一点,基本上将8080扩展到了16位,但是没有大张旗鼓的宣布。对于Intel来说的好消息是,IBM决定选择一个86的8比特版本。虽然IBM更喜欢68000,它具有更优雅的指令集,更接近于360,但是68000是落后的,因此IBM选择了8088。IBM当时认为他们能够出售大约250000台PC,但是实际情况是,他们卖出了一亿台。8086一夜成名,由于IBM之前已经发明了二进位兼容性,它与PC软体二进位兼容, 8086的前景变得非常光明。

因此,现在研究者开始注意这些微编码的计算机。这里有一张第四个从计算机体系结构获得图灵奖的人John Cocke的图片。这一阶段发生的事情是从汇编语言编程过渡到高级程序语言编程。那时高级程序语言非常流行,但被认为不能编写操作系统,而UNIX反驳了这一观点,UNIX就是使用高级程序语言编写的,实际上我们可以使用高级程序语言编写任何东西。在这种情况下,对于体系结构来讲,重要的不是汇编语言程序员做什么,而是编译器输出什么。John Cocke以及他在IBM的团队研制了ECL伺服器以及先进的编译器技术。他们宣称,让我们采用IBM大型机指令集的编译器技术,但是只使用载入和存储寄存器-寄存器操作的简单指令。这对性能将产生什么影响呢?它的速度提高了三倍。仅仅只是使用了指令集的一个子集,这是一个令人震惊的结果。然后计算机架构专家Joel Emer和Doug Clark做了一个VAX架构的研究,他们发现了一些有趣的事情。首先,每一条指令的平均时钟周期数是10,所以如果使用微代码解释器,它平均需要10个微指令才能做到同样的事情。其次,他们发现的另一件事情是,指令集的20%是微代码的60%,并且他们几乎从未被使用过。因此我们为什么还要保留那些指令。我(Patterson)在那个时代的情况是,我于1976年进入Berkeley,作为一名助理教授,三年后,我在DEC进行了一次休假,因为我在微程序设计方面完成了我的论文,他们想要我帮助解决微程序设计的bug。我震惊于从VAX指令集架构中寻找错误是如此的困难。因此我一返回Berkeley,就写了一篇论文,我说,如果继续遵循小型计算机以及大型机的趋势并且构造更加复杂的指令集,将面临微编码问题,然后就必须修理我们的微处理器bug。我提供的解决方案是使用可修复的微代码。但是这篇论文发生了什么事情?它被拒稿了。我记得审稿人说,使用可修复的微代码制造微处理器是一种愚蠢的方式。所以,我想,如果指令集变得更为复杂,我们就需要修复它,但是可修复的微处理器是一种愚蠢的方式,那么,我们要怎样做呢?

这是从CISC向RISC的转换。让我们将SRAM用作处理器内部的快速读取存储,而不是用于微代码解释器,作为用户可见指令的缓存,存储器的内容将根据程序执行的内容而变化。让我们保持指令集的简单,我们不再需要解释器,而是得到一个流水线实现。因此你可以认为RISC就像不那么宽的微指令那么简单。顺便一提的是,编译器只使用CISC指令集的一部分。在那个时代,由于摩尔定律,晶元越来越大,我们可以在单个晶元上获得整个32位的数据通路和缓存,这使得RISC更具有吸引力。同时,Greg Chaitin在寄存器分配方面取得了突破,使用图形著色(graph coloring)技术使得寄存器架构比以往更加高效。

Berkeley以及Stanford在当时的情况是,我们最开始通过一系列的研究生课程开展我们的工作,通过四个研究生课程研制了前面提到的RISC-1。其中的两名研究生决定制造一个更高效的后续版本。在同一时间,Hennessy和他在Stanford的学生研制了MIPS-1。这些成果都是在同一时间取得的。

你知道,我们希望在早期就已经得到了这个公式。但是我认为,这个公式是通过Clark评价VAX架构的工作来取得的。我们可以将这个公式分解为三部分,正如Dileep Bhandarkar在论文中写的一样,相比于RISC,CISC执行需要更少的指令,差不多是RISC指令的四分之三,但是需要更多的时钟周期,RISC相比CISC,存在差不多四倍的性能提升。

在PC时代,我们在Intel的同事可以组织500人的团队来构建微处理器,远远超过RISC人员所能做到的。他们拥有出色的技术,将x86指令翻译成RISC微指令,RISC中的一些好想法他们都可以使用,其晶元的产量增长到三亿五千万个每年,不仅仅主导桌面端,也主导伺服器端。但是在后PC时代,从2007年的iPhone开始,iPhone不从Intel那里购买晶元,它将知识产权整合到自己设计的SOC上,实际上,2017年,超过200亿个32位的RISC晶元被生产。X86产量在2011年随著个人电脑销量的下降而下降,而它们现在的销量已经比以往少了,云端虽然庞大,但是正如论文所估计的,云中大约有1000万台伺服器,因此也不需要那么多晶元。所以现在99%的市场是RISC。

OK,在计算机体系结构的下一段历史中,将是什么取代RISC和CISC?是超长指令自(VLIW)。VLIW领域最著名的专家是Josh Fisher。他实际上在微程序设计领域完成了他的论文,我们可以认为VLIW是水平微编码。VLIW是控制大量数据通路的非常宽的指令,由编译器完成所有工作。

对Intel来说,他们在过去已经从16位转换到了32位,现在是时候从32位转换到64位了,而他们决定押注VLIW,称为EPIC。事实上,Intel与Helett Packard合作,他也正在致力于VLIW的研究。他们一起研制EPIC架构,它是VLIW的具备二进位兼容性。他们在1994年开始大幅宣传这一技术,现在宣传的目的基本上都是出于商业原因了。我们知道,Intel使用这种紧急指令集已经20年了,因此获得更多的技术基础是有意义的。还有一个商业上的优势是,虽然AMD拥有制造x86的权利,但是对于新的指令集,他们不具有权利,不被允许制造。因此AMD被迫将x86扩展到64位,而这种新的架构后来占领了全世界。在90年代Intel和HP联合时,一大批人说他们代表著未来。一大批的公司相信了他们,放弃了他们正在做的事情,放弃了RISC架构,开始接受EPIC。

后来发生了什么?EPIC失败了,这与编译器相关。我们知道,在浮点运算中运行良好的代码可能不适合整数运算,指针引起了这个问题。另外由于VLIW是长指令,所以程序变得非常大。分支的不可预测也成了一个问题,特别是对于整数运算,缓存的命中降低。这些原因使得VLIW很难编译。而乱序执行技术对缓存的延迟要比VLIW更好,基本上可以说,乱序执行技术包含了VLIW的优势。但最重要的是VLIW所押注的编译器。虽然我也认为编译器能处理所有的复杂性,调度所有的的资源,但是结果证明,Don Knuth以及其它的图灵奖获得者说,这不可能被写出来。现在回想Itanium和EPIC的所有宣传,当人们空闲时,人们注意到一些事情,有些人不称呼它为Itanium,而是称呼为Itanic,你可以看到未来沉没了。因此这就是我们在计算机体系结构中做的事情,我们提出一些争论,然后公司花费数十亿美元投注双方,最后我们做出设计并弄明白。在这个例子中,它(EPIC)是失败的。

我的部分到了尾声,接下来我将向我的同事递交当今关于指令集的共识,「不是CISC」。自30年以来,没有人提出过一个微代码解释指令集。而VLIW不能用于通用目的,原因我们已经讲过了,但它在嵌入式RDSP中找到了用武之地,因为嵌入式程序的分支更简单,没有缓存,程序更小,所以它更适合VLIW,但是VLIW不能用于通用目的。所以被剩下的是什么,RISC,谁能猜到,35年以后,RISC仍然是最好的想法。

OK,现在有些事情真的是不同了。接下来我(Hennessy)将向大家介绍当前面临的一些挑战。

我知道大部分人对于这页PPT已经很熟悉了。技术在改变,我们正处在一个大量事情发生变化的时代。Dennard Scaling定律的结束意味著,低功耗变成一个重要的设计考量。摩尔定律的结束,虽然还没有完全结束,就像Gordon Moore向我说的那样,所有的指数都结束了。我们正处在摩尔定律减速的阶段,但是围绕我们的架构理念,我们面临一些和以往类似的挑战。我们推动的架构理念比以往更难,效率更低。不管是多核的想法还是Amdahl定律,都是利用指令并行的概念。随著这些架构理念的无效性变得越来越大,Dennard scaling定律的终结和摩尔定律的终结使得这个问题越来越难。

我们来看一下,处理器发生了什么事情?其实,我们在早期就遇到过这种情况,我们早期的CISC处理器每年的性能提升约22%。然后,我们进入了不可置信的高增长阶段,处理器的性能显著增长,每年提高50%,之后我们的指令级并行(ILP)失去了动力。随著Dennard scaling定律终结,我们转向多核,它起到了很好的效果,之后增长开始变低,并且最近两年的结果是,处理器的性能每年只提升3%。在显著增长阶段结束后,我们应该重新思考,我们要做什么,我们必须以不同的方式来解决问题。

如果你再看一下其它方面,你可以看到DRAMs中摩尔定律的放缓。当然,DRAMs是一个特殊的技术,它们依赖沟槽电容器技术,因此看起来它的尾部下降的比处理器更快。

即便你看看Intel处理器中晶体管的数量,你也可以看到摩尔定律的结束。在图中,八九十年代有一点点下降,然后我们集聚动力提高了速度。但是你可以从曲线上看到,从大约2000年开始,我们一直在下降。如果我们保持摩尔定律这条曲线,我们今天在典型处理器上的晶体管数量将是原来的十倍。所以我们面临的是更为严重的问题,它将我们从曲线上分离,这应该引起我们所有人去思考。

Dennard scaling定律,一个与摩尔定律类似的问题,但是更加尖锐。每个人认为低功耗是晶元设计的一项重要的工作。随著工艺的不断改进,我们得到了这条蓝色的曲线,功耗正沿著相反的方向发展,蓝色的曲线大约在2008年真正起飞,它只有上升、上升、再上升。能耗取决于我们使用晶体管的效率。不幸的是,我们使用晶体管的技术正变得越来越低效。想一下我们都喜欢的缓存,它在计算中是一个伟大的想法,我们的缓存越来越大,加速程序的效率却越来越低。所以这也是我们的挑战,我们必须找到新的方法来思考如何更高效的使用能源。

在午餐时间我们听到小组在讨论安全问题,我们处在一个非常糟糕的状态。简单地说,如果飞机像计算机一样经常发生故障,那么不住在南加州的人将不会出席本次会议,因为你们都在家中,永远都不会想坐飞机。如果汽车也这样发生故障,我们永远不会想开车。现在,我们中的一些人年纪可能足够大,能够记得以前曾经非常强调安全性。在70年代,一些伟大的项目中,例如Multics,有大量的研究关注安全。我们发明了域(domains)、环(rings)、甚至功能(capabilities)技术。我们在20世纪70年代进行了试点,但是这些想法没有被很好的利用,也没有开发出使其快速执行的架构技术(类似TLB(translation lookaside buffers)的技术使得虚拟存储成为可能。想像一下没有虚拟内存,每次内存访问需要两次主存访问)。我们没有针对安全技术开发高效的架构。因为这些技术看起来好像没用,他们有很多开销,最终被遗弃了。与此同时,我们认为形式验证将解决所有的安全问题。我记得基于内核或者微内核的操作系统,能控制安全性的操作系统的内核只有1000到2000行代码,但实际情况是,没有一个内核的代码量小于一百万行。因此我们基本上没有按照我们原来所设想的将问题解决。几乎所有的软体都有错误。你们中所有的人在购买软体时,将得到一个15页左右的文档,它基本上在讲,这个软体如何糟糕,是吧?你检查了包装盒子却购买了软体。因此我们硬体社区必须加强与操作系统社区的合作,与考虑安全性的人们一起合作来真正解决这个问题,如果我们不做这一点,我们的用户群体将会越来越不满意。

体系结构存在一些漏洞。这里只是一个简单的例子。Intel处理器拥有管理引擎(ME),在任何内核操作系统代码运行和机器设置之前先运行这些代码,但是有谁读过这一堆代码并且确保它在做安全的事情?我们都没有读过这些代码,因此我们遇到了大型指令集的真正问题,人们可以测试随机操作码,在指令集定义中寻找漏洞。我们必须解决很多安全问题,必须重新思考体系结构的安全性。

当然,正如我们在午餐时指出的那样,我们拥有幽灵般的计算机体系结构。这将要求我们重新思考指令集架构的定义,我们从未思考过时间基准。我的年纪足够大了,记得在20世纪70年代首次发现基于时间的攻击。在Top 10和Top 20上都发现了基于时间的攻击,他们运行在磁带系统上,我们只是忘记了,并且认为这是一个操作系统问题,是一个纯粹的软体问题。现在,这成为一个体系结构问题,是一个已经存在了20年的体系结构问题,我们甚至不了解它。因此我们需要重新思考安全性的意义、我们的角色、架构社区的角色以及如何协作。我认为将来会有更多微架构的攻击,更多基于时间的攻击。这意味著我们需要重新思考对安全性的看法。现在是时候思考这一问题了,我们需要重新定义计算机体系结构的概念。

至此,我们听到的所有事情都像是悲剧。摩尔定律放缓,Dennard scaling不再,架构安全一团乱麻,我们针对这些问题要做些什么呢?我总是引用John Gardner说过的一句好话,他说,我们所面临的是一些看起来不可能的挑战,机遇伪装成巨大的挑战,我们在这一领域,将拥有巨大的机会。

所以,这些机会是什么?

想想软体。我大约在25年前向Maurice Wilkes提问,如果摩尔定律放缓,届时会发生什么事情?他说,那么我们就不得不更仔细的思考如何编写软体并且更加注重效率。所以首先,我们获得了以软体为中心的机会。我们都使用现代脚本语言编写程序,他们是翻译执行的,是动态类型的,鼓励重用,非常友好,但是他们的运行效率表现的非常糟糕。其次,我们获得了以硬体为中心的机会,Dave和我都相信,唯一前进的道路就是让体系结构更具有领域专用性,我想在架构领域有非常多的人都持有这一观点。所以不要再尝试制造每件事情都能做好的通用处理器,而是制造一种能够非常好的完成部分任务的处理器,并且找出如何使用这些技术建立一个异构的架构。当然,我们可以将软硬体的机会组合起来,我们不仅要考虑特定领域的体系结构,还要考虑用于编程的专用语言。

这里有一张令人惊讶的图表,出自Leiserson的文章 「There』s Plenty Room at the Top」。文章采用了一个简单的算例即矩阵乘法。首先将初始的python版本程序重写为C程序,它的速度提高了整整47倍。以我在编译器领域的研究经验来讲,一个2的加速因子就足以让你成为编译器领域的明星,即使我们只是得到47的一半,我们也可以得到加速因子23,你将会成为一个英雄,你将赢得图灵奖。其次我们使用一颗18核的Intel处理器,分析并找到可并行的循环,因为我们的软体系统不能自动找到它们,我们得到另一个加速因子8。接下来对内存布局进行优化,使得缓存能够在大型矩阵上正确工作(因为通常情况下不能),我们将会得到因子20。最后我们使用具有AVX指令的领域专用硬体,获得性能提升上的另一个因子10。最终版本比初始版本快了大约62000倍。突破摩尔定律的限制需要做许多的工作。而这是一个很好的机会。

领域专用体系结构面向一系列上层应用,根据其计算特征来定制架构,从而获得更高的性能,这意味著DSAs向我们提供一种可编程的基础设施。一种体系结构的机器能够处理具有特定领域计算特征的一系列应用,这不仅仅是一个硬连线逻辑。机器学习的神经网路加速器、图形计算的GPUs、可编程网关,都是非常好的例子。

如果你了解Dave和我,你知道我们希望看到这些技术的定量解释,我认为这是重要的,因为技术不是黑魔法。它们为什么是高效的,是因为更高效的使用了指令级并行(SIMD对比MIMD,不如MIMD灵活,但是当它起作用时,更加高效,没有人会怀疑这点。对于VLIW、预取或者乱序执行。当VLIW起作用时,可以获得更好的性能),还是因为更好的利用存储带宽(缓存是一个伟大的想法除非不能起作用,因为无论是空间局部性、时间局部性还是流式,程序员更理解领域应用的存储访问模式),或者是消除了不必要的精度(用更低精度的浮点数替换IEEE浮点数,使用16位或者8位的整数替换32位或者64位的整数)。最后使用领域专用语言来编程,获得更高层次的效率。

什么是领域专用语言?我认为其关键问题是,如果你要支持特定领域,就很难从C或者Python开始并且抽取有效映射到硬体的所需知识水平。这个问题太难了。编译器社区的许多人都在致力于解决这一问题,只是太难了。我们需要一个高层次的编程语言,支持矩阵、向量或者其它高层数据结构以及这一层次上的专用操作。如果我们想要的领域专用程序仍然是与架构独立的,这意味著存在有意思的编译器上的挑战,【在构建某个领域的应用时,不需要考虑底层体系结构,DSL的设计既要考虑通用性,也考虑领域专用性】。因此我们面对编译器方面的有趣的挑战,它能够将领域专用的程序映射到一个特定的架构,并且这个架构可以随著版本变化。

我认为存在许多非常好的研究机会。对于通用应用,使得Python程序运行的像C语言一样快。现在的情况似曾相识,因为我们在RISC时代所作的事情就是使得高层编程语言在当时的体系结构上高效运行,现在是同样的挑战。对于领域特定应用,正确的目标是什么,合适的语言是什么,如何看待编译器技术,如何创建构建具有架构独立性的领域专用语言和应用。

有一个领域的论文数量增长速度和摩尔定律一样快,在这个图片中可以看到,它就是机器学习。这是一个明显的领域,它是计算密集型的,提供了许多有趣的想法,应用的数量正在突飞猛进的增长。

为什么不在机器学习上开展工作呢? Google的Tensor处理单元就是在这一领域进行尝试的一个例子,专注于神经网路。从Google的角度来看,如果不部署这项技术,将不能承担机器学习的大量应用,因为机器学习的计算成本太高了。

这些架构看起来完全不同,我们没有建立大型缓存并占用大量用于控制的体系结构,而是针对应用程序优化内存使用,因为内存访问的功耗非常巨大。尝试在晶元内而不是晶元外进行内存访问是非常困难的。可以考虑构建大量计算带宽以匹配正在运行的应用程序的类型。在做神经网路计算的情况下,需要做大量的矩阵乘法,所以你建立一个阵列。这是一个古老的想法,在它被创建30年后又回归了。

如果你看一下性能,可以看到显著的提升,每瓦性能的改进。当然,我们在这里所要面对的挑战之一是,使用什么应用或者什么基准。正如我们早期所作的一样,我们发明了SPEC作为一种标准化的方法,并且可以比较不同的架构,现在,我们不得不为机器学习或者其它领域做到这一点。我们在架构社区学到的一件事是,如果我们有一套基准测试,它是合理的,不会被篡改,将为每个人提供一种辅助,辅助他们思考如何提出想法,并且进行测试。

总而言之,机会很多,但是需要一种新的计算机体系结构研究方法。我们需要复兴计算机体系结构。我们需要考虑如何组建团队,将理解应用程序的人,理解计算机语言或者领域专用语言以及其它编辑器技术的人、理解体系结构及底层实现的人组合在一起,而不是只了解垂直技术栈中的一个小部分。我的观点是,应该回到过去,回到计算机公司垂直整合而不是横向分解的时代,我认为这为计算机学术界和工业界的人们提供了一个振奋人心的机会。感谢大家的出席,感谢大家组织了这次了不起的会议。

OK,现在是答疑之前的最后一部分。我(Patterson)总是嫉妒操作系统和编译器的同事,他们可以在工业界做出贡献,全世界都可以使用他们的代码,因为人们使用开源的操作系统。在体系结构领域我们为什么不这样做呢?RISC-V就是我们做的尝试。

V是因为它是Berkeley的第五个RISC项目。在Berkeley,Kraste Asanovic是项目主管,我们开发了指令集。虽然Intel是我们的赞助商之一,但是我们不被允许使用x86,因为x86是受控制的。Kraste决定和研究生一起重新开发一个全新的指令集。重新开发是一个激进的想法,但是它只花费了三个月。我们之后花费了四年制造了许多晶元。如果我们在Berkeley,那只是为了课程而修改我们的指令集,但是在与他人交谈中我们发现,业界渴望一个开放的指令集。他们在看了很多指令集后发现了RISC-V,并且开始使用它。因此当我们听到并理解了对开放指令集的需求,我们认为这是一个好主意,让我们帮忙实现这个目标。

RISC-V有什么不同吗?第一,它非常简单,比其它指令集要简单的多。这本手册大概200页,Andrew和Kraste写了其中的大部分,而x86大概是它的十倍。第二,这是一个全新的设计,使用它更容易。如果你现在也就是25年后回头看MIPS以及SPARC架构过去的所有错误,很多错误是可以避免的,例如不要与微架构绑定在一起,这在现在回头看时非常容易做到。第三,它是一个模块化的指令集,有标准化的基础,支持所有软体,然后还有可选的扩展,是否包括这一部分取决于你的应用。第四,因为我们知道领域专用架构会很重要,所以留出了大量的操作码空间。第五,它的社区设计也很重要,基础部分已经完成只有需要时才会更改,如果你想要添加扩展,可以通过社区,我们的专家也会在那里。通常情况下,如果你是公司,有可能会发布新指令集,那么所有的软体人员将会告诉你这有什么问题。我们预先排练过这些对话,这种机制是维护指令集的基础。第六,大学没有关注没有兴趣,所以它由一个非营利基金运行,它是一项技术,类似操作系统、编译器,因此它的改进工改取决于技术进步而不是市场因素。

RISC-V实际上由几个不同的指令集组成,一个32位,一个64位,甚至还有一个用于嵌入式,可选的标准化扩展包括:整数的乘除、原子的内存操作、单精度或者双精度浮点数、简洁的指令、向量扩展,这些都由基金会支持。

因此,其创始成员开始增长,最近几年已经超过了100个,nVIDIA在一个研讨会上宣布,他们将使用RISC-V替换他们的控制器,所以我知道未来市场可能增长到2到4千万每年。Western digital在研讨会上宣布他们准备把它放入硬碟中,让硬碟支持计算,这将让市场规模达到10亿级别每年。周四在Stanford的演讲中,两个来自Changhong和Anyka的人宣布他们准备采用RISC-V,并从明年开始有3千万的市场。所以,它真的开始流行起来了。

就标准部分和扩展部分而言,我认为这里有很多人参与了这些工作,但是我们知道,它是开放的,你可以与所有的专家一起开展对话,就像一个标准委员会一样,将一些指令纳入指令集。

RISC-V是一个开放指令集的例子,nVIDIA有一个开放的领域专用体系结构,它所有的技术都是开放的,软体栈是开放的,指令集架构是开放的,实现是开放的,它是一个可伸缩的设计,可以使用RISC-V作为核心也可以不用,这取决于你,这是另一个开放架构的例子。

与开放的架构类似的想法,大家不相信封闭的安全性,大家更相信开放,安全性将是计算机体系结构中的一个巨大的挑战,我们需要每个人都做贡献,在开放的环境中,每个人都可以做工作,包括能够提供有价值工作的学术界人员,而不只是为Intel或者其它的架构做工作。并且我认为,FPGA的巨大进步和开源实现以及开放式软体栈带来了令人兴奋的机会,我们可以开发新颖的架构并且放在网上,可以使测试者收到攻击,或者为攻击者提供奖励进行测试。所以你会有一个活跃的对手而不仅仅只是被动防守。即使它只有100MHz,也足够快,可以运行真正的软体,可以有用户。因为是FPGA,你可以在几个星期就可以迭代,而不是像标准的硬体一样花费几年。所以,我和别人交流时认为,RISC-V将成为典范。如果我们与架构师以及安全人员共同设计并推进它,那么人们就会使用RISC-V,使用它最新的想法。

因此,对开放架构进行总结。免费,任何人可以使用它,没有任何合同之类的东西限制,就像Linux一样。它非常简单,但是当我与公司交谈时,因为销售新的指令比实现更好的架构更简单,没有市场的因素来扩展它。那为什么还要做,因为它在底层和高层都将产生重大的影响。我们可以支持DSA,留有操作码空间。我想只要有更多的人构建处理器,它将成为一个有竞争力的市场,这意味著更快的更新速度,安全专家也将会围绕RISC-V开会。我们的目标是统治全球,我想不到其它的原因,因为现在到处都是RISC处理器,希望它能成为处理器中的Linux。

最后部分是敏捷硬体开发。在15年前,软体工程取得了这一领取的突破,软体过程模型超越了划分详细计划和阶段的瀑布模型,提高软体质量。这是一次「反叛」,需要我们做到敏捷。我们将进行短期开发。首先制作系统原型交给客户,看看他们接下来想要什么,然后进行快速迭代,这是软体工程的一次革命。我们使用Scrum模型管理硬体开发,你有一个小团队进行开发,首先建立原型,然后暂停,看看你接下来的需求,然后努力再冲刺。好消息是现代CAD使我们能够使用一些软体开发过程技术,因此,小型团队可以通过抽象和重用来完成一些工作。以下是Berkeley在三种不同设计方面的例子。

左边一个是三级流水线、32位设计,中间一个是经典的5级流水线、64位设计,右边是一个乱序执行处理器、64位设计。所有例子中,不到一半的代码都是特有的,你可以分享它们。提升级别抽象减少了代码行,但最重要的是获得代码重用。

当你在做硬体时,你如何开展为期一个月的迭代,这个小组遵循的是这个迭代模型。首先,你可以像开放软体一样进行创新。但是现在,你不能运行那么多时钟周期,你不能有数十亿或数万亿的时钟周期。如果你想看看它实际上是如何工作的,那么你可以对FPGA进行更改。过去几年发生的好消息是云中存在FPGA的实例,你甚至不需要购买硬体来做FPGA,你可以去云端使用它。别人把它全部设置好并维护它,你可以使用它,并且在这个会议上有这样的例子。但是,如果我们真的关心能耗和成本,我们必须进行layout,这就是下一次迭代。一旦想法在模拟器和FPGA中工作,并再实际中进行布局,就会给出一些估计。你需要做更多的工作才能真正做好tap-in。现在我们可以在这里停下来,因为你已经可以在时钟速率和所有这些东西上准确估计面积和功率。但是为什么不停在那里,这是因为我们是硬体人员。我们对软体人员的优势最大的区别在于他们被困在虚拟空间,那里的程序不是物理的。而我们得到一些物理上的东西,当晶元被制作出来时,我们会感到兴奋,它是否会起作用,它的工作速度有多快,功率和性能有多少。因此,构建晶元的原因是奖励,所有参与者的奖励,而研究生或公司获得晶元。现在我们觉得这一定非常昂贵,其实它并不贵,我们的测试晶元都很便宜。你可以一个接一个地制作100个,你知道,28毫米的10毫米平方晶元,14,000美元,根据摩尔定律,我们拥有数百万个晶体管,你可以在一个微小的测试晶元中获得RISC-V内核和nVIDIA DLA,它只需14,000美元。每个人都能负担得起。现在如果你想构建一个真正的大晶元,这将是最后一步,当然会更昂贵但是每个人都有能力制造晶元。

在krsteAsanovic领导的Berkeley的一个项目中,他们在五年内制造了10个晶元。所以使用这个敏捷模型,你没有像我那样等待几年,然后看看它会发生什么。他们不断的开始下一次迭代,所以从这个课程中毕业的学生对这些晶元能够正常工作非常有信心,因为他们构建了大量的晶元并且每个晶元都变得更好了,敏捷模型更胜一筹。

因此在我们回答问题之前,John和我认为我们正在进入一个新的黄金时代。Dennard缩放和摩尔定律的结束是否意味著我们可以在体系结构上进行创新。如果你想让事情做得更好,它不会发生在微体系结构层面。如果仅使用软体解决方案不会保证系统的安全性,安全性显然也需要体系结构上的创新。领域特定语言提高了抽象级别,对程序员更加友好,也使架构师更容易进行创新,领域专用架构得到的因子是20或40,而不是5%或10%。开放式体系结构和开放式实现减少了工作量,您可以加入并像编译器和操作系统领域的同事一样,对这些设备进行增强,每个人都可以开展工作。云FPGA让每个人都更容易构建硬体,看起来像定制硬体,这种敏捷开发意味著我们所有人都可以负担制造晶元的费用。所以,正如John所说的那样,就跟在20世纪80年代我们是年轻架构师的时候一样,现在是一个架构师的好时机,即使在学术界也是如此。


推荐阅读:
相关文章