计算机架构的新黄金时代

作者是2017年图灵奖的获得者John Hennessey和David Patterson,“其设计和验证计算机体系结构的创新系统且可衡量的方法对整个微处理器行业产生了持久影响。” 文章发表在ACM通讯中,2019年2月,第62卷,第2期,第48-60页,doi:10.1145 / 3282307

“那些不记得过去的人注定要重蹈覆辙” -乔治·桑塔亚那(George Santayana),1905年

我们于2018年6月4日开始了Turing讲座 ,回顾了60年代开始的计算机体系结构。 除了他之外,我们还重点介绍当前问题,并尝试确定在未来十年内有望在计算机体系结构领域开创新黄金时代的未来机会。 与1980年代一样,当我们进行改善成本,能效,安全性和处理器性能的研究时,我们获得了这一荣誉奖。

关键思想


  • 软件进步可能推动架构创新
  • 软件和硬件接口水平的提高为架构创新创造了机会
  • 市场最终决定了建筑纠纷的胜者


该软件通过称为“指令集体系结构”(ISA)的词典与设备“对话”。 到1960年代初,IBM拥有四款不兼容的计算机系列,每台计算机都具有自己的ISA,软件堆栈,I / O系统和市场细分市场-分别面向小型企业,大型企业,科学应用和实时系统。 包括图灵奖获得者小弗雷德里克·布鲁克斯(Frederick Brooks Jr.)在内的IBM工程师决定创建一个有效地将这四个要素结合在一起的ISA。

他们需要有关如何为具有8位和64位总线的计算机提供同样快速的ISA的技术解决方案。 从某种意义上说,总线是计算机的“肌肉”:它们可以完成任务,但相对容易“压缩”和“扩展”。 过去和现在,设计人员面临的最大挑战是处理器的“大脑”-控制设备。 受编程启发,计算机科学先驱和图灵奖获得者莫里斯·威尔克斯(Maurice Wilkes)提出了简化此系统的选择。 控件以二维数组的形式表示,他称其为“控件库”(control store)。 阵列的每一列对应一条控制线,每一行是微指令,微指令的记录称为微编程 。 控制存储器包含一个由微指令编写的ISA解释器,因此正常指令的执行需要多个微指令。 实际上,控制内存是在内存中实现的,它比逻辑元素便宜得多。


IBM System / 360系列的四个模型的功能; IPS表示每秒操作

下表显示了1964年4月7日推出的IBM System / 360中新ISA的四种模型。 总线相差8倍,内存容量是16,时钟速度几乎是4,性能是50,成本几乎是6。最昂贵的计算机具有最广泛的控制内存,因为更复杂的数据总线使用了更多的控制线。 最便宜的计算机由于硬件更简单而具有较少的控制内存,但是它们需要更多的微指令,因为它们需要更多的时钟周期来执行System / 360指令。

得益于微编程,IBM押注新的ISA将彻底改变计算行业-并赢得了赌注。 IBM主导了其市场,而拥有55年历史的IBM大型机的后代仍然每年产生100亿美元的收入。

正如反复指出的那样,尽管市场在技术上并不是一个完美的仲裁者,但是由于架构和商用计算机之间的紧密联系,它最终决定了架构创新的成功,这通常需要大量的工程投资。

集成电路,CISC,432,8086,IBM PC


当计算机切换到集成电路时,摩尔定律意味着控制内存可能会变得更大。 反过来,这允许使用更复杂的ISA。 例如,Digital Equipment Corp.的VAX-11 / 780控制存储器。 1977年,它的5位字为96位,而其前身仅使用256位字为56位。

一些制造商已为可能添加了自定义功能的部分客户启用了固件。 这称为可写控制存储(WCS)。 WCS最著名的计算机是Alto ,图灵奖得主Chuck Tucker和Butler Lampson及其同事在1973年为施乐帕洛阿尔托研究中心制造了这种计算机。 它确实是第一台个人计算机:这是第一台具有逐元素成像的显示器和第一台本地以太网。 创新型显示和网卡的控制器是微程序,存储在WCS中,容量为4096字(32位)。

在70年代,处理器仍然保持8位(例如Intel 8080),并且主要在汇编器中进行编程。 竞争对手添加了新的指令,使其彼此之间表现出众,并通过汇编示例展示了他们的成就。

戈登·摩尔(Gordon Moore)相信英特尔的下一个ISA将永远为公司服务,因此他聘请了许多计算机科学方面的聪明医生,并将他们送到波特兰的新工厂,以发明下一个出色的ISA。 正如英特尔最初所说的那样,8800处理器已成为任何时代绝对雄心勃勃的计算机体系结构项目,当然,它是80年代最激进的项目。 它包括采用新的Ada编程语言的基于32位功能的寻址,面向对象的体系结构,可变长度指令以及其自己的操作系统。

不幸的是,这个雄心勃勃的项目需要数年的发展,这迫使英特尔在圣塔克拉拉启动了一个紧急备份项目,以便在1979年迅速发布16位处理器。 英特尔给了新团队52周的时间来开发新的ISA“ 8086”,设计和制造芯片。 由于时间紧,ISA设计在三个常规日历周中仅花费了10个人周,这主要是由于8位寄存器的扩展以及将8080条指令集扩展到16位所致。 该团队如期完成了8086,但是宣布这款当机的处理器并没有大张旗鼓。

英特尔非常幸运,因为IBM正在开发一款与Apple II竞争的个人计算机,并且需要一个16位微处理器。 IBM希望通过与IBM 360类似的ISA来访问Motorola 68000,但它落后于IBM的积极计划。 取而代之的是,IBM转而使用8位版本的8086总线,当IBM在1981年8月12日发布PC时,它希望到1986年销售25万台计算机。 取而代之的是,该公司在全球范围内销售了1亿个产品,这为英特尔的紧急ISA带来了非常光明的未来。

最初的Intel 8800项目被重命名为iAPX-432。 最终,它于1981年发布,但它需要多个芯片并且存在严重的性能问题。 它在1986年完成,也就是Intel将16位ISA 8086扩展到80386,并将寄存器从16位增加到32位的一年。 因此,摩尔关于ISA的预测被证明是正确的,但是市场选择了8086制成的一半,而不是使用iAPX-432。 正如摩托罗拉68000和iAPX-432处理器的架构师意识到的那样,市场很少能够表现出耐心。

从复杂到缩写的指令集


在1980年代初期,对具有一组复杂指令(CISC)的计算机进行了几项研究:它们在大型控制存储器中具有大型微程序。 当Unix证明甚至可以使用高级语言编写操作系统时,主要问题是:“编译器将生成什么指令?” 而不是以前的“程序员将使用什么汇编程序?” 硬件-软件接口水平的显着提高为架构创新创造了机会。

图灵奖获得者John Kokk及其同事开发了更简单的ISA和微型计算机编译器。 作为实验,他们将研究编译器重新定向为使用IBM 360 ISA,以仅使用寄存器之间的简单操作并加载内存,从而避免了更复杂的指令。 他们注意到,如果使用简单的子集,程序的运行速度将提高三倍。 Emer和Clark 发现 ,20%的VAX指令占用了60%的微代码,仅占用了0.2%的执行时间。 本文的一位作者(Patterson)在DEC度过了一个创意假期,有助于减少VAX微代码中的错误。 如果微处理器制造商打算在大型计算机中使用一组复杂的CISC命令来遵循ISA设计,则他们期望大量微码错误,并希望找到一种解决方法。 他写了这样的文章 ,但《 计算机 》杂志拒绝了。 评论者认为,使用ISA构建微处理器的可怕想法是如此复杂,以至于需要在现场进行修复。 这次失败使人们怀疑CISC对于微处理器的价值。 具有讽刺意味的是,现代的CISC微处理器的确包含微代码恢复机制,但是拒绝发表该文章激发了作者为微处理器开发一种不太复杂的ISA(具有简化指令集(RISC)的计算机)。

这些注释以及向高级语言的过渡,使从CISC过渡到RISC。 首先,简化了RISC指令,因此不需要解释器。 RISC指令通常像微指令一样简单,可以直接由硬件执行。 其次,先前用于CISC微代码解释器的快速存储器被重新设计为RISC指令高速缓存(该高速缓存是一个小型的快速存储器,用于缓存最近执行的指令,因为此类指令很可能在不久的将来被重用)。 第三, 基于Gregory Chaitin的图形着色方案的寄存器分配器极大地促进了编译器寄存器的有效使用,这得益于这些ISA的寄存器到寄存器操作。 最终,摩尔定律得出这样的事实:在1980年代,芯片上有足够多的晶体管可在单个芯片上容纳完整的32位总线,以及用于指令和数据的缓存。

例如,在图2中。 图1显示了1982年和1983年在加利福尼亚大学伯克利分校和斯坦福大学开发的RISC-IMIPS微处理器,它们证明了RISC的优势。 结果,在1984年的领先电路设计会议IEEE国际固态电路会议( 1、2 )上展示了这些处理器。 那是一个美好的时刻,伯克利和斯坦福的几位研究生创造了超过那个时代工业能力的微处理器。


1.加州大学伯克利分校的RISC-I处理器和斯坦福大学的MIPS

这些学术芯片激发了许多公司创建RISC微处理器的速度,这是未来15年中最快的。 该说明与以下处理器性能公式有关:

时间/程序=(指令/程序)×(度量/指令)×(时间/度量)

DEC工程师后来显示 ,对于一个程序,更复杂的CISC需要RISC指令数量的75%(公式中的第一项),但是在类似的技术(第三项)中,每条CISC指令要多花费5-6个周期(第二项),这使RISC微处理器快约4倍。

80年代的计算机文学中没有这样的公式,这使我们在1989年写了《 计算机体系结构:一种量化方法 》一书。 副标题解释了本书的主题:使用度量和基准来量化取舍,而不是像过去那样依靠设计师的直觉和经验。 图灵奖获得者Donald Knuth的书为算法所做的工作也启发了我们的定量方法。

VLIW,EPIC,Itanium


下一个创新的ISA应该超越RISC和CISC的成功。 英特尔和惠普公司非常长的VLIW机器指令体系结构及其表亲EPIC(使用显式机器指令并行性进行计算)使用了长指令,每条指令均由多个独立的操作链接在一起。 当时VLIW和EPIC的支持者认为,如果一条指令可以表示六个独立的操作(两个数据传输,两个整数操作和两个浮点操作),并且编译器技术可以有效地将操作分配给六个指令槽,然后可以简化设备。 与RISC的方法类似,VLIW和EPIC将工作从硬件转移到了编译器。

英特尔和惠普共同开发了一种基于EPIC的64位处理器,以取代x86 32位体系结构。 人们对第一个称为Itanium的EPIC处理器寄予了很高的期望,但是现实与开发人员的早期说法并不吻合。 尽管EPIC方法对于高度结构化的浮点程序非常有效,但对于具有较少可预测的分支和高速缓存未命中的整数程序,它无法实现高性能。 正如Donald Knuth后来指出的那样 :“ Itanium应该...真棒-直到事实证明所需的编译器基本上无法编写。” 评论家注意到安腾的发布被推迟,并称其为Itanik,以纪念命运不佳的客船泰坦尼克号。 市场再次没有表现出耐心,而是采用了64位版本的x86(而不是Itanium)作为后继产品。

好消息是,VLIW仍适用于运行具有较小分支且无高速缓存遗漏的小型程序的更专业的应用程序,包括数字信号处理。

PC和PC后时代的RISC与CISC


AMD和英特尔需要500个设计团队和卓越的半导体技术来弥合x86和RISC之间的性能差距。 同样,为了通过流水线实现性能,实时指令解码器将复杂的x86指令转换为内部类似RISC的微指令。 然后,AMD和Intel为其实施建立一条管道。 RISC设计人员用来提高性能的任何想法-分离的指令和数据缓存,芯片上的二级缓存,深层管道以及同时接收和执行多个指令-都包含在x86中。 在2011年个人计算机时代的顶峰时期,AMD和英特尔每年出货约3.5亿个x86微处理器。 高产量和低行业利润率也意味着价格低于RISC计算机。

每年售出数亿台计算机,软件已成为一个巨大的市场。 尽管Unix软件供应商必须针对不同的RISC体系结构发布不同版本的软件(Alpha,HP-PA,MIPS,Power和SPARC),但个人计算机只有一个ISA,因此开发人员发布了“压缩的”软件,该软件仅与体系结构二进制兼容x86。 由于其庞大的软件基础,​​相似的性能和较低的价格,到2000年,x86架构主导了台式机和小型服务器市场。

苹果在2007年借助iPhone迎来了后PC时代。 智能手机公司没有购买微处理器,而是使用其他人的开发成果来制作自己的片上系统(SoC),包括ARM的RISC处理器。 在这里,设计人员不仅重要,而且性能,功耗和芯片面积也很重要,这不利于CISC体系结构。 此外,物联网显着增加了处理器数量,并在芯片尺寸,功耗,成本和性能方面进行了必要的权衡。 这种趋势增加了设计时间和成本的重要性,进一步恶化了CISC处理器的地位。 在当今的后PC时代,自2011年峰值以来,x86的年出货量已下降了近10%,而RISC芯片已飙升至200亿。 如今,全球32%和64位处理器中有99%是RISC。

总结历史回顾,我们可以说市场已经解决了RISC和CISC之间的争端。 尽管CISC赢得了PC时代的后期阶段,但RISC赢得了后PC时代的到来。 几十年来,CISC没有新的ISA。 令我们惊讶的是,在RISC发明35年之后,今天对于通用处理器的最佳ISA原则的普遍共识仍然支持RISC。

处理器架构的现代挑战


“如果问题没有解决方案,也许这不是问题,而是您应该学习生活的事实” -Shimon Peres

尽管上一节着重于指令集体系结构(ISA)的开发,但是业内大多数设计人员并不开发新的ISA,而是将现有的ISA集成到现有的制造技术中。自70年代末以来,流行的技术一直是MOS结构(MOS)上的集成电路,首先是n型(nMOS),然后是互补(CMOS)。戈登·摩尔(Gordon Moore)的预测抓住了MOS技术惊人的改进步伐,这是使设计人员能够开发出更积极的方法来实现给定ISA性能的驱动力。摩尔在1965年的初步预测是晶体管密度每年增加一倍。 1975年,他对其进行了修订,并预计每两年翻一番。最后,这一预测开始被称为摩尔定律。由于晶体管的密度平方增长,并且速度线性增长,因此使用更多的晶体管可以提高生产率。

摩尔定律和丹纳德定标定律的终结


尽管摩尔定律已经生效数十年(见图2),但大约在2000年左右,它开始放慢了速度,到2018年,摩尔的预测与当前能力之间的差距已扩大到15倍。摩尔在2003年提出这是不可避免的当前预计,随着CMOS技术接近基本极限,这一差距将继续扩大。


2.与摩尔定律相比,英特尔芯片上晶体管的数量

。摩尔定律伴随着罗伯特·丹纳德(Robert Dennard)所作的一个名为“ Dennard Scaling”的预测。随着晶体管密度的增加,晶体管的能量消耗将下降,因此每平方毫米的硅消耗量几乎恒定。随着新一代技术的发展,硅毫米计算能力的提高,计算机变得更加节能。 Dennard的规模在2007年开始显着放缓,到2012年几乎消失了(见图3)。


图3.每个芯片的晶体管数量和每平方毫米的能耗

从1986年到2002年,指令级并发(ILP)是提高生产率的主要体系结构方法。随着晶体管速度的提高,这使生产率每年提高了约50%。 Dennard扩展的终结意味着建筑师必须找到更好的使用并发的方法。

要了解为什么增加ILP会降低效率,请考虑现代ARM,Intel和AMD处理器的核心。假设他有一个15级流水线,每个时钟有4条指令。因此,在传送带上的任何时候,多达60条指令,包括大约15条分支,因为它们构成了所执行指令的25%。为了填充管道,需要对分支进行预测,并将代码推测性地放入管道中以执行。推测性预测既是ILP绩效又是效率低下的根源。当分支预测是理想的选择时,推测会提高性能,并且只会稍微增加功耗-甚至可以节省能源-但是,如果分支预测不正确,则处理器必须丢弃错误的计算。所有的工作和精力都浪费了。处理器的内部状态也必须恢复到误解分支之前的状态,这会花费额外的时间和精力。

要了解这种设计有多么复杂,请想象一下正确预测15个分支结果的难度。如果处理器的设计者将损失限制设置为10%,则处理器必须以99.3%的准确度正确预测每个分支。可以如此精确地预测出许多通用分支程序。

要评估浪费的工作内容,请考虑图11中的数据。图4显示了有效执行但由于处理器错误地预测分支而浪费的指令比例。在Intel Core i7上的SPEC测试中,平均浪费了19%的指令。但是,由于错误地预测状态时,处理器必须使用额外的能量来恢复状态,因此花费的能量会更大。


图4。浪费的指令占在Intel Core i7上针对各种整数SPEC测试执行的所有指令的百分比,

这种测量得出的结论是,应寻求不同的方法来获得更好的性能。因此,多核时代诞生了。

在此概念中,用于识别并发并决定如何使用并发的责任已转移到程序员和语言系统。多核并不能解决高能效计算的问题,但随着Dennard扩展规模的扩大,这种问题变得更加严重。每个活动核心都消耗能量,无论它是否参与有效的计算。主要障碍是被称为阿姆达尔定律的旧观测。它说并行计算的好处受到顺序计算的限制。为了评估这种观察的重要性,请考虑图5。该图显示了在只有一个处理器处于活动状态的情况下,假设顺序计算的比例不同,则64个内核的应用程序与一个内核相比运行速度要快多少。举个例子如果1%的时间按顺序执行计算,则64处理器配置的优势仅为35%。不幸的是,功耗与64个处理器成比例,因此浪费了大约45%的能量。


图5.考虑到顺序模式下测量的比例,阿姆达尔定律对提高速度的影响

当然,实际程序的结构更为复杂。有一些片段可让您在任何给定时间使用不同数量的处理器。但是,需要定期进行交互和同步,这意味着大多数应用程序的某些部分只能有效使用部分处理器。尽管阿姆达尔定律已有50多年的历史,但这仍然是一个困难的障碍。

随着Dennard扩展规模的结束,芯片上内核数量的增加意味着功率也以几乎相同的速率增长。不幸的是,提供给处理器的电压应作为热量去除。因此,多核处理器受到热输出功率(TDP)或机箱和冷却系统可以去除的平均功率的限制。尽管某些高端数据中心使用更先进的冷却技术,但没有用户会希望在桌面上放一个小型热交换器或背着散热器来冷却手机。 TDP限制导致了黑暗的硅时代,当时处理器降低了时钟速度并关闭了空闲内核以防止过热。考虑此方法的另一种方法是一些微电路可以将其宝贵的功率从不活动的内核重新分配给活动的内核。

没有丹纳德扩展规模的时代,以及摩尔定律和阿姆达尔定律的减少,这意味着低效率将生产率的提高限制在每年仅百分之几(见图6)。


6.通过整数测试(SPECintCPU)来

提高计算机性能如80年代和90年代所指出的,要实现更高的性能改善率,就需要采用更有效利用集成电路功能的新架构方法。我们将回到有关潜在有效方法的讨论中,提到现代计算机的另一个严重缺陷-安全性。

被遗忘的安全


在70年代,处理器开发人员借助保护环到特殊功能等各种概念,努力地确保了计算机的安全性。 他们很清楚大多数错误都在软件中,但是他们相信架构支持可以提供帮助。 这些功能大多数未被假定在安全环境中运行的操作系统(例如个人计算机)使用。 因此,消除了与大量开销相关的功能。 在软件社区中,许多人认为正式的测试和方法(例如使用微内核)将为创建高度安全的软件提供有效的机制。 不幸的是,我们通用软件系统的规模和对性能的追求意味着这种方法无法跟上性能。 结果,大型软件系统仍然存在许多安全漏洞,并且由于Internet上大量且不断增长的个人信息以及使用云计算(用户与潜在攻击者共享同一物理设备)而扩大了影响。

尽管处理器设计人员和其他人员可能尚未马上意识到安全性的重要性,但他们开始包括对虚拟机和加密的硬件支持。 不幸的是,分支预测在许多处理器中引入了一个未知但重要的安全漏洞。 特别是, 漏洞Meltdown和Spectre利用微体系结构功能,允许泄漏受保护的信息 。 当信息根据在任务上花费的时间差异而泄漏时,它们都使用对第三方渠道的所谓攻击。 在2018年,研究人员展示了如何使用Spectre选项之一来通过网络提取信息,而无需将代码下载到目标处理器 。 尽管这种称为NetSpectre的攻击传递信息的速度很慢,但实际上,它使您可以攻击同一本地网络(或云中同一群集中的任何计算机)的攻击,这会创建许多新的攻击媒介。 随后,又报告了虚拟机体系结构中的两个漏洞( 1,2 )。 其中一种名为Foreshadow,可让您渗透旨在保护最有价值的数据(例如加密密钥)的Intel SGX安全机制。 每月发现新漏洞。

对第三方渠道的攻击并不是新事物,但是在大多数情况下,软件错误是更早的故障。 在Meltdown,Spectre和其他攻击中,这是硬件实现中的缺陷。 处理器架构师如何确定ISA的正确实现存在一个根本性的困难,因为标准定义没有说明执行一系列指令的性能影响,仅说明了ISA的可见架构执行状态。 架构师应重新考虑对ISA正确实现的定义,以防止此类安全漏洞。 同时,他们必须重新考虑对计算机安全的关注,以及架构师如何与软件开发人员一起实施更安全的系统。 架构师(以及其他所有人)除了以基本需求为前提之外,不应以其他任何方式获取安全性。

计算机体系结构的未来机会


“我们被伪装成无法解决的问题而获得了惊人的机会。” -约翰·加德纳(John Gardner),1965年

通用处理器固有的效率低下,无论是ILP技术还是多核处理器,再加上Dennard的可扩展性和摩尔定律的完成,使得架构师和处理器开发人员不可能在提高通用处理器性能方面保持显着步伐。 考虑到提高软件生产力的重要性,我们必须提出一个问题:还有哪些其他有前途的方法?

有两种明显的可能性,以及通过将两者结合而创建的第三种可能性。 首先,现有的软件开发方法广泛使用具有动态类型的高级语言。 不幸的是,这种语言通常被非常低效地解释和执行。 为了说明这种低效率,Leiserson及其同事举了一个小例子:矩阵乘法


7.经过四次优化后,Python矩阵相乘的潜在加速

如图所示。 7,只需将代码从Python重写为C即可将性能提高47倍。 在许多内核上使用并行循环会带来大约7的额外因数。为使用缓存而优化内存结构的因素是20,而最后9的因素来自使用硬件扩展来执行能够执行16个32位指令的并行SIMD操作。 之后,最终高度优化的版本在英特尔多核处理器上运行的速度是原始Python版本的62,806倍。 当然,这只是一个小例子。 可以假定程序员将使用优化的库。 尽管性能差距被夸大了,但是可能有许多程序可以优化100-1000倍。

一个有趣的研究领域是是否可以通过新的编译器技术弥补某些性能差距,也许还可以通过改进体系结构来解决这一问题。 尽管很难有效地翻译和编译高级脚本语言(例如Python),但潜在的收益却是巨大的。 即使是很小的优化也会导致Python程序运行速度提高数十到数百倍的事实。 这个简单的例子说明了注重程序员性能的现代语言与强调性能的传统方法之间的差距有多大。

专业建筑


更加面向硬件的方法是设计适合特定主题领域的体系结构,在这些领域中,它们表现出显着的效率。 这些是专用的特定于域的体系结构(特定于域的体系结构,DSA)。 这些通常是可编程和图灵完备的处理器,但要考虑到特定的任务类别。 从这个意义上讲,它们与专用集成电路(ASIC)不同,专用集成电路通常用于与很少更改的代码相同的功能。 DSA通常称为加速器,因为与在通用CPU上运行整个应用程序相比,它们可以加速某些应用程序。 另外,DSA可以提供更好的性能,因为它们可以更精确地针对应用程序的需求进行定制。 DSA的示例包括图形处理器(GPU),用于深度学习的神经网络处理器以及用于软件定义网络(SDN)的处理器。 DSA实现更高的性能和更高的能源效率有四个主要原因。

首先,DSA对特定主题领域使用更有效的并发形式。 例如,SIMD(单指令流,多个数据流) 比MIMD (多指令流,多个数据流) 更有效 。 尽管SIMD的灵活性较差,但它非常适合许多DSA。 专用处理器也可以使用VLIW的ILP方法代替投机性差的机制。 如前所述, VLIW处理器不太适合通用代码 ,但对于狭窄区域,由于控制机制更简单,因此效率更高。 特别是,最高端的通用处理器是过多流水线的,这需要复杂的控制逻辑来启动和完成指令。 相反,VLIW在编译时执行必要的分析和计划,这对于显然并行的程序可能会很好地工作。

其次,DSA服务可以更好地利用内存层次结构。 正如Horowitz指出的那样 ,对内存的访问已经比算术计算昂贵得多。 例如,访问32 KB缓存中的块比添加32位整数所需的能量大约高200倍。 如此巨大的差异使得优化内存访问对于实现高能效至关重要。 通用处理器执行其中存储器访问通常表现出空间和时间局部性的代码,否则在编译时就很难预测。 因此,为了增加吞吐量,CPU使用多层缓存并将延迟隐藏在芯片外部相对较慢的DRAM中。 这些多级缓存通常消耗大约一半的处理器能量,但是它们阻止了几乎所有对DRAM的调用,而DRAM的能耗是访问最后一级缓存的十倍。

缓存有两个明显的缺陷。

当数据集很大时 。 当数据集非常大,时间或空间局部性较低时,缓存根本无法很好地工作。

缓存何时运行良好 。 当高速缓存运行良好时,局部性很高,也就是说,根据定义,大多数高速缓存大部分时间都是空闲的。

在内存访问模式在编译时定义良好且易于理解的应用程序中(对于典型的特定于域的语言(DSL)而言确实如此),与动态分配的缓存相比,程序员和编译器可以更好地优化内存使用率。 因此,DSA通常使用由软件明确控制的移动存储器层次结构,类似于矢量处理器的工作方式。 在相应的应用程序中,“手动”用户内存控制使您可以花费比标准缓存少得多的能量。

第三,如果不需要高精度,DSA可能会降低计算精度。 通用CPU通常支持32位和64位整数计算以及浮点(FP)数据。 对于许多机器学习和图形应用程序,这是多余的准确性。 例如,在深度神经网络中,计算通常使用4位,8位或16位数字,从而提高了数据吞吐量和处理能力。 同样,浮点计算对于训练神经网络很有用,但是32位(通常为16位)就足够了。

最后,DSA受益于用特定于域的语言编写的程序,这些程序允许更多的并发性,改进结构,内存访问的表示方式并简化专用处理器上有效的应用程序覆盖。

面向学科的语言


DSA要求更高级的操作适应处理器体系结构,但是使用通用语言(例如Python,Java,C或Fortran)很难做到这一点。 特定领域的语言(DSL)可以帮助您解决此问题,并使您可以有效地对DSA进行编程。 例如,DSL可以使显式矢量,密集矩阵和稀疏矩阵运算变得显式,从而允许DSL编译器将运算有效地映射到处理器。 在特定领域的语言中,有Matlab(一种用于矩阵的语言),TensorFlow(用于对神经网络进行编程),P4(用于对软件定义的网络进行编程)以及Halide(用于处理具有高级转换的图像)。

DSL的问题是如何保持足够的体系结构独立性,以便可以将其上的软件移植到各种体系结构中,同时将软件与基本DSA进行比较时可以达到很高的效率。 例如, XLA系统将Tensorflow代码转换为具有Nvidia GPU或张量处理器(TPU)的异构系统。 在语言开发人员,编译器和DSA本身之间,平衡DSA之间的可移植性并保持效率是一项有趣的研究任务。

DSA示例:TPU v1


作为DSA的示例,请考虑Google TPU v1,其旨在加快神经网络的运行速度( 1、2 )。 该TPU自2015年以来生产,并且已经在其上运行了许多应用程序:从AlphaGo和AlphaZero中的搜索查询到文本翻译和图像识别,以及用于下棋和下棋的DeepMind程序。 目标是将深度神经网络的生产力和能源效率提高10倍。


8.功能组织Google Tensor处理单元(TPU v1)

如图8所示,TPU的组织与通用处理器完全不同。 主要的计算单元是矩阵单元,即脉动阵列结构 ,每个周期产生256×256乘累加。 8位精度,高效的脉动结构,SIMD控制以及该功能的大部分芯片分配相结合,使每个周期的累加运算比通用CPU内核多约100倍。 TPU代替高速缓存使用24 MB的本地内存,这大约是具有相同TDP的2015年通用CPU高速缓存的两倍。 最后,神经元激活存储器和神经网络平衡存储器(包括存储权重的FIFO结构)都通过用户控制的高速通道连接。 Google数据中心中神经网络的逻辑输出的六个典型问题的加权平均TPU性能比通用处理器高29倍。 由于TPU所需的功率不到一半,因此它在此工作负载下的能效是通用处理器的80倍以上。

总结


我们研究了通过提高使用硬件技术的效率来提高程序性能的两种不同方法。 首先,通过提高通常被解释的现代高级语言的生产率。 其次,通过为特定主题领域创建体系结构,与通用处理器相比,该体系结构显着提高了性能和效率。 特定领域的语言是如何改善实现DSA之类的体系结构创新的软硬件接口的另一个示例。 为了使用这种方法取得巨大的成功,将需要一个垂直集成的项目团队,他们精通应用程序,面向主题的语言和相关的编译技术,计算机体系结构以及基本的实现技术。 在行业成为水平结构之前,计算机技术领域的大多数早期工作都需要垂直集成和在不同抽象级别上做出设计决策。 在这个新时代,垂直整合变得越来越重要。 可以发现并接受复杂的折衷和优化的团队将获得优势。

这次机会已经导致了建筑创新的激增,吸引了许多竞争性建筑哲学:

显卡 Nvidia GPU 使用多个内核,每个内核都有大型寄存器文件,多个硬件流和缓存。

热塑性聚氨酯 Google TPU依靠大型的二维脉动阵列和片上可编程存储器。

现场可编程门阵列 Microsoft Corporation在其数据中心中实现了用户可编程门阵列(FPGA),该阵列用于神经网络应用程序。

中央处理器 英特尔以类似于Microsoft FPGA的方式提供具有许多内核,大型多层缓存和一维SIMD指令的处理器,而新的神经处理器更接近TPU,而不是CPU

除了这些主要参与者外,还有数十家初创公司实施自己的想法 。 为了满足不断增长的需求,设计人员正在组合成千上万的芯片来创建神经网络超级计算机。

神经网络架构的大量涌现表明计算机架构历史上一个有趣的时代到来了。 在2019年,很难预测这许多领域中的哪个将获胜(如果有人赢得),但是市场肯定会决定结果,就像它解决了过去的架构辩论一样。

开放式架构


以成功的开源软件为例,开放式ISA代表了计算机体系结构中的另一种机会。 他们需要创建一种“用于处理器的Linux”,以便社区除了拥有专有内核的各个公司之外,还可以创建开源内核。 如果许多组织使用相同的ISA设计处理器,则更多的竞争会导致更快的创新。 目标是提供价格从几美分到100美元的处理器架构。

第一个示例是RISC-V(RISC五),这是加利福尼亚大学伯克利分校开发第五种RISC体系结构 。 她得到了RISC-V基金会领导的社区的支持。该体系结构的开放性使得ISA的发展可以在公众的参与下进行,并且需要专家的参与,直到做出最终决定。开放式基金的另一个优点是,ISA不太可能主要出于市场原因而扩展,因为有时这是扩展其自己的指令集的唯一解释。

RISC-V是模块化指令集。一个小的指令库将启动一个完整的开源软件堆栈,然后是其他标准扩展,设计人员可以根据需要启用或禁用这些扩展。该数据库包含32位和64位版本的地址。 RISC-V只能通过可选扩展来增长。即使架构师不接受新的扩展,软件堆栈仍可以正常工作。专有架构通常需要二进制级别的向上兼容性:这意味着,如果处理器公司添加了一项新功能,则所有将来的处理器也都应包括该功能。 RISC-V并非如此,此处所有增强功能都是可选的,如果应用程序不需要它们,则可以将其删除。这是目前的标准扩展名,带有全名的首字母:

  • M.整数的乘法/除法。
  • A.原子内存操作。
  • F / d。单/双精度浮点运算。
  • C.压缩指令。

RISC-V的第三个特点是ISA的简单性。尽管该指标无法量化,但这里有两个与ARMv并行开发的ARMv8架构的比较:

  • 较少的指示RISC-V的指令少得多。数据库中有50个,并且它们在数量和特征上都与原始RISC-1非常相似其余的标准扩展(M,A,F和D)增加了53条指令,加上C增加了34条指令,因此总数为137。为进行比较,ARMv8有500条以上的指令。
  • . RISC-V : , ARMv8 14.

简单性简化了处理器设计的设计和检查其正确性。由于RISC-V专注于从数据中心到物联网设备的所有内容,因此设计验证可能是开发成本的重要组成部分。

第四,RISC-V是经过25年的整洁的设计,在此,建筑师可以从其前任的错误中吸取教训。与第一代RISC体系结构不同,它避免了依赖于技术(例如延迟的分支和延迟的下载)或创新(例如寄存器窗口)的微体系结构或功能,这些技术或功能已被编译器的进步所取代。

最后,RISC-V支持DSA,为自定义加速器保留了广阔的操作码空间。

除了RISC-V,Nvidia还宣布了(2017年)她将其称为免费和开放的体系结构,称为Nvidia深度学习加速器(NVDLA)。它是可扩展的,可定制的DSA,用于推理机器学习。配置参数包括数据类型(int8,int16或fp16)和二维乘法矩阵的大小。硅基板的尺寸从0.5mm²到3mm²不等,能耗从20 mW到300 mW。 ISA,软件堆栈和实现都是开放的。

开放,简单的体系结构与安全性紧密结合。首先,安全专家不相信模糊不清的安全性,因此开放源代码实现很有吸引力,并且开放源代码实现需要开放式体系结构。同样重要的是,可以在安全体系结构领域进行创新的人员和组织的数量也在增加。专有架构限制了员工的参与,但是开放式架构允许学术界和行业中的优秀人才帮助安全。最后,RISC-V的简单性简化了其实现的验证。此外,开放的体系结构,实现和软件堆栈以及FPGA的灵活性,意味着架构师可以每周而不是每年的发布周期在线部署和评估新解决方案。尽管FPGA比定制芯片慢10倍,但是它们的性能足以在网上工作,并在真正的攻击者面前展示安全创新以进行验证。我们希望开放式架构成为架构师和安全专家协作进行硬件和软件设计的示例。

灵活的硬件开发


灵活软件开发宣言(2001) Beck等人,通过消除基于计划和文档的传统瀑布式系统的问题,彻底改变了软件开发。小型程序员团队可以快速创建可运行但不完整的原型,并在开始下一次迭代之前接收客户反馈。Scrum版本的Agile聚集了由五到十个程序员组成的团队,他们每次迭代耗时2-4周。

再次从软件开发中借用了这个想法,就可以组织灵活的硬件开发。好消息是,现代电子计算机辅助设计(ECAD)工具已经提高了抽象水平,可以进行灵活的开发。更高的抽象水平还提高了不同设计之间的工作重用水平。

考虑到从设计创建到芯片生产之间的几个月时间,对处理器来说,四周的冲刺似乎难以置信。在图。图9显示了如何通过在适当的级别上修改原型来灵活地工作方法


图9.灵活的设备开发方法

最内层是软件模拟器,是最简单,最快的更改地方。下一级别是FPGA芯片,其工作速度比详细的软件模拟器快数百倍。 FPGA可以与操作系统和完整的基准测试(例如,标准性能评估公司(SPEC))一起使用,从而可以更准确地评估原型。 Amazon Web Services在云中提供了FPGA,因此架构师可以使用FPGA,而不必先购买设备并建立实验室。下一级别使用ECAD工具生成芯片电路,以记录尺寸和功耗。即使在工具工作之后,在将新处理器投入生产之前,也必须遵循一些手动步骤来完善结果。处理器开发人员将其称为下一个级别。磁带插入。前四个级别支持四个星期的冲刺。

出于研究目的,我们可以停在第四级,因为面积,能量和性能的估算非常准确。但这就像跑步者跑完马拉松并在终点站前5米处停了下来,因为他的终点时间已经明确了。尽管要为马拉松做艰苦的准备,他仍然会错过穿越终点线的快感和乐趣。与软件工程师相比,硬件工程师的优势之一是他们可以创造物理事物。从工厂获取芯片:测量,运行真实程序,并向亲朋好友展示它们,这对于设计师来说是一种极大的乐趣。

许多研究人员认为,应该停止生产,因为芯片制造太便宜了。但是,如果设计很小,则价格会出奇的便宜。工程师只需14,000美元即可订购100个1mm²的微芯片。在28 nm处,一个1mm²的芯片包含数百万个晶体管:这对于RISC-V处理器和NVLDA加速器就足够了。如果设计人员打算制造大型芯片,那么最外部的级别是昂贵的,但是在小型芯片上可以展示许多新的想法。

结论


« — » — , 1650

, , , / . iAPX-432 Itanium , , S/360, 8086 ARM , .

摩尔定律的完善和Dennard的定标以及标准微处理器性能的下降并不是应该解决的问题,但是,正如您所知,这提供了令人兴奋的机会。高水平的面向主题的语言和体系结构摆脱了专有指令集的束缚,再加上公众对增强安全性的需求,将为计算机体系结构开辟一个新的黄金时代。在开源生态系统中,人工设计的芯片将令人信服地展示其成就,从而加快商业化实施。这些芯片中的通用处理器原理很可能是RISC,它经受了时间的考验。期待与过去的黄金时代一样的快节奏创新,但是这次是在成本,能源和安全性方面,而不仅仅是性能方面。

在接下来的十年中,将出现寒武纪新计算机架构的爆炸式增长,这对学术界和行业的计算机架构师来说是令人兴奋的时刻。

Source: https://habr.com/ru/post/zh-CN440760/


All Articles