From Science.aam9744
回顾总结
背景:
计算性能的提升对我们现代生活的方方面面都有巨大的改变:现在的手机比25年前房间大的电脑性能还要强劲,因特网联通了接近半个世界,强大的超级计算机帮助药物的发现。社会已经开始依赖性能随时间呈指数增长的计算机。
计算机性能的提高很大程度上来自于几十年来计算机部件的小型化,这一趋势是诺贝尔奖获得者物理学家理查德·费曼在1959年对美国物理学会演讲中预见到的,“底部还有很大的空间,”1975年,英特尔创始人戈登·摩尔预测了这种小型化趋势的规律性,这种趋势现在被称为摩尔定律,从那时起到最近,计算机芯片上的晶体管数量每两年翻一番。
不幸的是,半导体小型化作为一种提高计算机性能的可行方法正在枯竭——在“底部”没有太多空间。如果计算能力的增长停滞,几乎所有行业都将面临生产率的挑战。然而,计算性能的增长机会仍然存在,尤其是在计算技术堆栈的“顶端”:软件、算法和硬件架构。
进步:
软件可以通过性能工程变得更高效:重组软件使其运行得更快。性能工程可以消除程序中的低效,即软件膨胀,这是由传统的软件开发策略引起的,这些策略旨在最小化应用程序的开发时间,而不是运行时间。性能工程还可以根据运行的硬件定制软件,例如,利用并行处理器和矢量单元。算法为解决问题提供了更有效的方法。事实上,自20世纪70年代末以来,解决最大流问题的时间从算法的进步和硬件的加速上得到了几乎同样多的改善。但是,在一个给定的算法问题上的进展是非线性和零星的,最终必须面对收益减少。因此,我们认为最大的收益来自新问题领域的算法(例如,机器学习)和开发更好地反映新兴硬件的新理论机器模型。
硬件架构可以简化,例如,通过处理器流线化,用需要更少晶体管的更简单的内核替换复杂的处理内核。释放出来的晶体管预算可以通过其他方式重新部署,例如,增加并行运行的处理器内核数量,这可以为利用并行性的问题带来巨大的效率增益。另一种流线化形式是领域专门化,即为特定的应用领域定制硬件。这种类型的专门化抛弃了该领域不需要的处理器功能。它还允许对领域的特定特性进行更多的定制,例如,通过降低机器学习应用程序的浮点精度。
在后摩尔时代,来自软件、算法和硬件架构的改进将越来越需要在堆栈的其他级别进行并发更改。从工程管理和经济的角度来看,如果这些变化发生在大型系统组件中,那么它们将更容易实现:可重用的软件,通常有100多万行代码,或者具有类似复杂性的硬件。当单个组织或公司控制一个大组件时,模块化可以更容易地重新设计以获得性能收益。此外,成本和收益可以集中起来,这样,大组件中某个部分的重要但代价高昂的变化就可以由同一组件中其他部分的收益来证明。
展望:
随着小型化的衰落,底层的硅制造改进将不再提供社会已经享受了50多年的计算机性能的可预测的、基础广泛的提高。在后摩尔时代,软件性能工程、算法开发和硬件精简可以继续使计算机应用程序更快。然而,与底部的历史收益不同,顶部的收益将是机会主义的、不均衡的和零星的。此外,随着具体的计算被更好地探索,它们将受到收益递减的影响。
回顾
50多年来,半导体晶体管的小型化推动了计算机性能的增长。随着小型化接近极限,摩尔定律即将终结,性能提升将需要来自软件、算法和硬件的改进。我们将这些技术称为计算堆栈的“顶部”,以区别于“底部”的传统技术:半导体物理和硅制造技术。在后摩尔时代,”顶部“将提供可观的性能收益,但这些收益将是机会主义的、不均衡的、零星的,它们将受到收益递减规律的影响。大系统组件为应对在顶层工作的挑战提供了一个充满希望的环境。
在过去的50年里,正如物理学家理查德·费曼在1959年对美国物理学会的演讲中所预见的那样,半导体器件的小型化一直是计算机性能提高的核心,“底层还有很大的空间。”英特尔创始人戈登·摩尔预测每块计算机芯片的晶体管数量将每两年翻一番,这种节奏被称为摩尔定律,一直持续到最近。此外,直到2004年左右,新晶体管不仅更小,而且更快、更节能,为计算机提供了更高的速度和存储容量。摩尔定律无处不在地推动着经济进步。
不幸的是,费曼的“底层房间”已经不多了。半导体国际技术路线图预见了小型化的终结,微处理器技术的领导者英特尔承认摩尔节奏的终结。事实上,英特尔在2014年生产了14纳米技术,但它推迟了原定于2016年生产的10纳米技术,直到2019年。尽管其他制造商继续小型化——例如三星Exynos 9825和美AppleA13仿生(9)——但他们也未能满足摩尔节奏。底部没有更多的空间。
为什么小型化会停滞不前?这是因为基本的物理极限——材料的物理性质在原子水平上发生变化——以及芯片制造的经济性。虽然半导体技术可能能够生产小到2纳米(20 埃)的晶体管,但实际上,由于回报递减,小型化可能会在5纳米左右结束。即使半导体技术专家能把事情做得更进一步,随着我们接近原子尺度,这样做的成本会急剧上升。
在这篇综述中,我们讨论了摩尔定律结束后计算机性能增长的替代途径。我们相信机会可以在更高层次的计算技术堆栈中找到,我们称之为“顶层”相应地,我们所说的“底部”是指在摩尔时代显著改进的半导体技术。计算堆栈的各层利用底部的晶体管和其他半导体器件在顶部进行有用的计算,以解决现实世界的问题。我们将”顶部“分为三层:(1)硬件架构——执行计算的可编程数字电路;(2)软件——指示数字电路计算什么的代码;以及(3)算法——计算效率问题。我们认为,即使底层的工艺技术不再提供性能提升,顶层也将继续提供机会。
与摩尔定律不同的是,摩尔定律通过“提升所有的船”来推动性能的提高,而在顶层工作将产生机会主义的、不均衡的和零星的收益以获得性能的提高,通常一次只改进特定计算的一个方面。对于任何给定的问题,收益都将受到收益递减规律的影响。从长远来看,成果将取决于将计算应用于新的问题,就像数字计算机诞生以来一直在发生的那样。
在顶层工作以获得性能也不同于底层,因为它对整个计算系统的影响是不同的。由于计算中的数字硬件、软件和数据的逻辑行为几乎完全独立于底部晶体管的大小,因此小型化提供的性能不需要在计算堆栈的上层进行实质性改变。因此,计算堆栈的上层可以利用更小、更快的晶体管,而几乎没有变化。相比之下,不幸的是,”顶层“的许多部分相互依赖,因此,当一个部分进行重组以提高性能时,其他部分通常必须适应以利用甚至容忍这些变化。当这些更改渗透到系统中时,可能需要花费大量人力才能正确地实现和测试它们,这既增加了成本,又增加了风险。从历史上看,顶层改进性能的策略与摩尔定律并存,用于加速特定的应用程序,这些应用程序需要的不仅仅是摩尔定律所能提供的自动性能提升。
在这里,我们认为顶层有很大的提升空间,我们概述了软件、算法和硬件这三个领域中每一个领域都有希望提升的机会。我们通过实例和数据分析来探索这些领域可改进的规模。我们还将讨论为什么“大型系统组件”将为在顶层获取这些收益提供肥沃的土壤。
软件
摩尔时代的软件开发通常侧重于最大限度地减少开发应用程序所需的时间,而不是在应用程序部署后运行该程序所需的时间。这种策略导致了程序十分低效,通常被称为软件膨胀。此外,目前的很多软件没能利用诸如并行处理器和向量单元一类的芯片架构特性上的优点。在后摩尔时代,软件性能工程——重组软件以使其可以运行的更快——通过消除软件臃肿和根据硬件架构的特效定制软件以使应用程序更快运行。
为了说明性能工程的潜在收益,请考虑将两个4096乘以4096的矩阵相乘的简单问题。让我们从一个用流行的高级编程语言Python编写的实现开始。下面是用于矩阵乘法的Python2代码的四行内核:
for i in xrange(4096):
for j in xrange(4096):
for k in xrange(4096):
C[i][j] += A[i][k] * B[k][j]
这个代码使用了三重嵌套循环并且使用的是线性代数中的基本方法。然而,事实证明,这个天真的代码让现代计算机上的大部分性能都”摆在桌面上当作装饰“。这个代码花费了大概7个小时在现代计算机上来计算矩阵乘积,如表1中第一行(version 1)所示,仅达到机器峰值性能的0.0006%(顺便说一句,Python3需要大约9小时)。
如何对这种天真的矩阵乘法代码进行性能工程设计?只需选择一种更高效的编程语言,就可以极大地加快计算速度。例如,用Java(版本2)编码它会产生10.8倍的加速比,而用C(版本3)编码会产生4.4倍的额外加速比,从而使执行时间比原来的Python快47倍。这种性能改进来自于减少程序执行的操作数量。特别是,Java和C避免了Python为了简化编程而在幕后做的无关紧要的工作。这种性能提升的代价是程序员的花费在编程上的时间:用C编写代码比用Python编写代码更麻烦,而Java介于两者之间。
尽管切换语言的速度提高了近50倍,但对矩阵代码进行定制以利用硬件的特定功能使其运行速度额外提高了1300倍。这一收益来自于将代码并行化以在所有18个处理核心(版本4)上运行、利用处理器的内存层次结构(版本5)、对代码进行矢量化(版本6)以及使用英特尔的特殊高级矢量扩展(AVX)指令(版本7)。最终优化的代码执行任务只需0.41秒比原始Python代码的7小时快了6万多倍!
这个例子的重点是说明对天真编码软件进行性能优化带来的潜在收益。在矩阵乘法的特殊情况下,优秀的程序员可以通过使用现有软件库中的优化代码来避免这种编程工作。然而,如果她要编写代码来解决新问题,她将需要自己优化代码。虽然不是每个应用程序都能通过性能工程提高近5个数量级,但大多数现代软件系统都有大量的性能提升机会,特别是在代码库足够大的情况下。
在后摩尔时代,让代码快速运行将变得越来越重要,尤其是要根据运行它的硬件进行调整。现代计算机提供旨在使代码快速运行的体系结构功能。例如,版本4和版本6利用并行性,这是计算机同时执行多个操作的能力。版本5利用了局限性,当数据元素并置在内存中(空间局限性)或最近被访问(时间局限性)时,局限性是计算机高效访问数据元素的能力。版本7通过仔细协调使用英特尔的AVX在结构中利用了并行性和局部性。正如我们将在硬件体系结构一节中看到的那样,体系结构可能会变得越来越异构,既包含通用电路,也包含专用电路。为了提高性能,程序需要公开更多的并行性和局部性,以供硬件利用。此外,软件性能工程师将需要与硬件架构师协作,以便新处理器呈现简单且引人注目的抽象,从而使开发硬件性能变得尽可能容易。
除了为硬件量身定做软件之外,还有膨胀的问题:软件膨胀从何而来?当然,正如矩阵乘法代码的版本1到3所说明的那样,一些膨胀来自于牺牲效率以换取其他所需的特性,例如编码简易性。正如版本4到版本7所示,膨胀还来自于未能针对底层架构定制代码。但是,许多软件膨胀是由软件开发策略引起的,例如缩减。
缩减的想法是这样的。假设您是一名程序员,他被要求解决一个问题A(例如,区分口头回答yes或no)。您可以直接编写专门的代码来解决A,但是您可能会注意到一个相关的问题B已经解决了(现有的语音识别软件可以理解许多单词,包括yes和no)。通过将A转换为可以用B的现有代码解决的问题,通过将A简化为B,您将花费更少的精力来解决A。
效率低下既可能源于缩减本身(将A转换为B),也可能源于B的一般性(B的解决方案不是专门针对A量身定做的)。但最大的膨胀来自于缩减的复合效应:将A减为B、B减为C、C减为D,依此类推。即使每次缩减都达到了令人印象深刻的80%的效率,一系列两个独立的减量也只能达到80%×80%=64%。再复合20次,效率不到1%,即膨胀100倍。
由于摩尔时代多年的缩减主义设计造成的累积膨胀,现在有很大的机会让程序运行得更快。不幸的是,使用专门的软件直接解决问题A需要A领域的专业知识和性能工程方面的专业知识,这使得该过程比简单地使用缩减更昂贵和更有风险。由此产生的解决A问题的专门软件往往比简化A到B的软件更复杂。例如,表1(版本7)中完全优化的代码比原始Python版本(版本1)的源代码长20倍以上。
确实如此,简单的代码往往很慢,而快速的代码往往复杂。要创造一个很简单的写高效代码的世界,应用开发程序员必须具备性能工程他们代码的知识和技能,同时提高生产力的工具必须大大改进。
抽象的说,软件性能工程可以被视为一个简单的过程,只涉及一个简单的循环:(1)测试程序A性能(2)对程序A进行一个改变,以产生有望更快的程序A‘(3)测量程序A’(4)如果A‘比A快,那么A=A’(5)如果A仍然不够快,则返回步骤(2)。但是今天,我们的系统太过复杂以至于测量总是要重复多次才能确定一个版本确实比另一个版本强。
随着硬件变得越来越专门化和异构化(参见硬件体系结构一节),编写高性能代码将变得更加困难。然而,由于在后摩尔时代,更快的软件对于更好的性能将变得越来越重要,因此计算行业、研究人员和政府都应该有很好的动力来开发性能工程技术。
算法
算法的进步已经为性能增长做出了很多贡献,并且在未来还将继续这样做。一个主要目标是用较少的计算工作解决问题。例如,通过使用Strassen的算法进行矩阵乘法,表1的版本7中高度优化的代码可以改进约10%。对于某些问题,这个收益是足够令人印象深刻的:美国总统科学和技术顾问委员会在2010年得出结论:”由于算法改进而带来的性能提升远远超过了由处理器速度所带来的令人激动的性能提升。
然而,由于算法设计需要人的聪明才智,因此很难预测会有什么进展。为了说明算法进展的本质,考虑寻找网络中最大流量的经典运筹学问题,该问题可用于对道路网络中的交通运动、血液在循环系统中的运动或电路中的电流进行建模。线性规划是解决最大流量问题的一种直接方法,但在1975年至1995年的20年间,一系列算法创新极大地改进了这一问题。
图1显示了一段时间内最大流量算法的进展情况。在38年的数据中,最佳算法的性能增益可以与摩尔定律的增益相媲美(略高于四个数量级,而不到五个数量级),尽管在过去20年中没有新的算法改善这个特定问题的性能。这个例子突出了关于算法的三个显著观察:(1)给定算法问题的进展不均匀且零星地发生。(2)算法创新的收益可以与摩尔定律的收益相媲美。(3)在解决任何给定问题时的算法改进最终必须减少。
然而,因为这个例子关注的是一个众所周知的问题,所以它忽略了算法性能工程如何加速计算的一个关键方面:为新问题提供有效的解决方案。例如,在2016年计算机械协会(ACM)离散算法研讨会上发表的146篇论文中,超过四分之一的论文关注的是以前没有在算法上研究过的问题。因此,尽管对旧问题的研究可能仍然会产生边际收益,但算法的大部分进展将来自三个来源:(1)攻击新的问题域,(2)解决可伸缩性问题,以及(3)调整算法以利用现代硬件。我们轮流讨论每个来源.
新的问题域不断产生对新算法的需求。机器学习、社交网络、安全、机器人、博弈论、传感器网络和视频编码等领域在30年前还很小或根本不存在,但现在经济上足够重要,需要高效的算法。多亏了算法,许多公司都获得了竞争优势。谷歌的PageRank算法使其万维网搜索变得优越,而谷歌AdWords的拍卖算法(允许广告商根据用户的搜索条件竞标显示空间)使其利润丰厚。内容分发网络在2016年提供了超过一半的互联网流量,依靠高效的算法来避免拥塞。许多科学也依赖于好的算法。例如,计算生物学中的DNA测序依赖于高效的动态编程算法。
摩尔定律在目前高端计算机上实现了主内存存储上T数据,由于问题大小的相应增加,因此需要有效的算法来使解决方案负担得起。次线性算法提供了如何解决规模问题的一个示例。例如,要找到1万亿个数字的中位数,仅读取输入数据就需要至少1万亿次内存操作。但许多问题并不需要确切的中位数,只要对中位数有一个很好的估计就可以很好地工作。对于这些问题,我们可以从一百万个数字中随机抽取一个样本,然后计算该样本的中位数。结果是对真实中位数的高度精确估计,计算速度可以提高一百万倍。算法领域充满了处理可伸缩性的策略。
调整算法以利用现代硬件可以使其更快(表1)。尽管如此,今天的大多数算法仍然被设计使用最初在20世纪60年代和70年代开发的串行随机存取机模型,该模型假定一个处理器一次只能执行一个操作,并且访问存储器的任何部分的成本都是相同的。这类算法经常低效地使用现代硬件,因为它们没有充分利用机器的许多并行处理核心和向量单元,每个核心和向量单元在每个时钟周期都可以执行许多操作,而且它们无法利用缓存,而缓存可以将数据访问速度加快两个数量级。
一种可行方案是自动调优,其搜索可能实现的参数化空间以找到最快的实现。使用现代机器学习,甚至可能包含比几个参数值相差更多的实现。不幸的是,自动调优和机器学习往往太耗时,不能要求每个算法都招致如此巨大的前期成本。此外,这些方法实际上增加了算法设计的难度,因为设计者不容易理解设计选择的后果。在后摩尔时代,算法设计师和硬件架构师必须共同努力,找到设计师可以理解、架构师可以高效实现的简单抽象。
硬件架构
从历史上看,计算机架构师使用越来越多的晶体管来使串行计算运行得更快,这极大地增加了处理核心的复杂性,尽管随着时间的推移,性能的提高会受到回报递减的影响。我们认为,在后摩尔时代,建筑师将需要采取相反的策略,专注于硬件精简:使用更少的晶体管和更少的硅面积来实现硬件功能。
正如我们将看到的,硬件流线化的主要优势来自于为更多的电路提供更多的芯片面积以便并行操作。因此对于应用程序来收最大的好处是丰富的并行性。事实上,没有太多并行性的应用程序的硬件性能已经停滞不前。但在许多新兴的应用领域,如机器学习、图形学、视频和图像处理、感知计算和信号处理,都存在大量的并行性。在摩尔定律结束之后的许多年里,计算机架构师应该能够设计精简的体系结构,为这些领域和其他领域提供不断提高的性能。
我们可以用历史数据来观察架构依赖并行的趋势。图2绘制了微处理器的三组基准数据:SPECint性能(黑色方块和灰色菱形)、SPECinterate性能(黑色、橙色、蓝色和红色方块)和微处理器时钟频率(绿色圆点)。如图中的绿点所示,从1985年到2005年,时钟速度增加了200多倍,但由于Dennard比例调整的结束,时钟速度趋于平稳,我们稍后将对此进行讨论。在Dennard-Scaling时代,在时钟速度提高和其他架构变化的推动下,微处理器性能迅速提高,通过SPECint和SPECinterate基准(黑色正方形)进行衡量,这两个基准旨在对典型用户工作负载的计算机性能进行建模。SPECint基准主要由串行代码组成,而SPECint-rate基准是并行的。这两个基准测试在单处理器计算机上执行相同的性能。但在2004年后,随着机器添加多核和其他形式的显式并行,这两种方式出现了分歧。事实上,从2004年到2015年,在性能最好的芯片(彩色方块)上的并行应用程序的性能每年都增长了30倍,平均每两年提高两倍左右。相比之下,最近十年里,更大的串行SPECint基准(灰色菱形)仅放大了三倍。
除了并行性,应用程序还需要局限性才能从精简中获益。例如,当数据从外部动态随机存取存储器(DRAM)存储器芯片传输到处理芯片时,在传输回之前应该多次使用。对于局限性很小的应用程序,增加并行度会导致片外内存流量成比例增加,并且最终超过其通道到存储器的带宽,因此应用程序是受内存限制的。然而,对于具有良好局限性的应用程序,随着并行度的增加,片外内存通信量的增长会变得更加缓慢,从而使芯片的所有计算引擎都可以在不空闲的情况下执行有用的工作。幸运的是,许多重要的应用程序领域都包含大量的局限性和并行性。
硬件流线化可以通过其他方式利用局部性,特别是对于特定于域的处理器,我们稍后将讨论这一点。例如,显式数据编排利用局限性来提高在整个存储器层次结构中移动数据的效率。如果使用片上互连的应用程序包含局限性,则片上互连可以变得更简单、功耗和面积更小。例如,脉动阵列可以使用面积高效的网状互连比通用互连更有效地执行矩阵计算。
虽然硬件会因为流线化而提高能力,但我们认为摩尔定律结束后,平均时钟速度不会提高,实际上可能会略微降低。图2显示时钟速度在2005年趋于平稳,当时微处理器设计变得功率受限。在2004年前,计算机架构师们找到了在不达到硬功率限制的情况下提高时钟频率的方法。Dennard Scaling——随着时钟频率的增加而降低电压——允许处理器在不增加功耗的情况下运行得更快。(实际上,处理器制造商经常在不按比例降低电压的情况下提高时钟频率,这确实提高了芯片功耗。)然而,自2004年以来,摩尔定律在每个芯片上提供了更多的晶体管,但由于为它们供电的能力并没有明显提高,架构师们被迫进行创新,仅仅是为了防止时钟频率下降。稍低的时钟频率和电源电压足以降低每个晶体管的功率,从而使更多的电路可以并行运行。如果工作负载具有足够的并行性,增加的计算足以补偿较慢的时钟。串行应用程序的性能可能会稍差一些,但智能转换可以降低这一成本。例如,英特尔的“Turbo”模式[,当活跃的内核较少时,时钟运行得更快。(减少晶体管切换的其他技术包括在高速缓存中使用更多晶体管、对未使用的电路进行电源选通以及最小化信号切换。)
既然设计者已经接受了并行性,那么主要问题将是如何流线化处理器以利用应用程序并行性。我们预计有两种策略将占据主导地位:处理器简化和领域专门化。
处理器简化用需要更少晶体管的更简单的核取代复杂的处理核。现代内核包含许多昂贵的机制来使串行指令流运行得更快,例如推测执行,其中硬件猜测并跟踪代码执行的未来路径,如果猜测是错误的,则中止并重新执行。比方说,如果一个芯片可以简化为占用一半的晶体管,那么芯片上可以容纳的内核就是原来的两倍。要使这种权衡物有所值,工作负载必须具有足够的并行性,使额外的核心保持繁忙,并且两个简化的核心必须比单个复杂的核心执行更有用的计算。
领域专门化可能比简化更重要。为应用程序域定制的硬件可以更精简,使用更少的晶体管,从而使应用程序的运行速度提高数十到数百倍。也许当今最好的例子是图形处理单元(GPU),它包含许多并行的“通道”,带有专门用于计算机图形的流线型处理器。
GPU在图形计算上提供了更高的性能,尽管它们的时钟较慢,因为它们可以利用更多的并行性。集成到笔记本电脑微处理器中的GPU逻辑占芯片面积的比例从2010年的15%到25%增长到2017年的40%以上(参见Methods),这表明GPU加速器的重要性。此外,根据追踪高性能计算技术的500强网站的数据,2012年进入500强的超级计算机中,只有大约10%的计算机包含加速器(通常是GPU),但到了2017年,这一比例已经增长到38%。Hennessy和Patterson预见了从通用到特定领域架构的转变,这种架构运行大型系统的小型计算密集型内核,用于对象识别或语音理解等任务。关键要求是应用程序域中最大开销的计算具有足够的并行性和局限性。
专用处理器通常首先作为连接到通用处理器的设备来实现。但是,鼓励专门化的力量必须与需要扩展的力量相平衡:扩展专用处理器的功能,使其更加独立于通用处理器,并更广泛地用于其他应用领域。
GPU的发展证明了这一权衡。GPU最初是专门为渲染图形而开发的,因此,GPU对于许多其他计算任务几乎毫无用处,例如编译计算机程序或运行操作系统。尽管如此,GPU已经扩展到可以方便地执行各种非图形任务,例如线性代数。考虑软件一节中的矩阵乘法问题。Advanced Micro Devices(AMD)FirePro S9150 GPU可以在70ms内产生结果,这比优化代码(版本7)快5.4倍,比原始Python代码(版本1)快36万倍。
作为通用和专业化之间权衡取舍的另一个例子,GPU对“深度学习”革命至关重要,因为它们能够训练大型神经网络,而通用处理器不能足够快地训练。但专业化也取得了成功。谷歌开发了一款专为深度学习设计的张量处理单元(TPU),采用了特殊用途的处理,避开了GPU更广泛的功能。在摩尔时代,专业化通常会让位于扩展,因为在摩尔定律生产出性能同样出色的通用处理器之前,开发特殊用途设备的投资回报必须通过销售在有限的时间内摊销。然而,在后摩尔时代,我们预计会看到更多专用设备,因为它们不会有性能相当的通用处理器可以与之竞争。我们还期待针对不同应用领域的多样化硬件加速器,以及混合专业化,即单个设备针对多个领域量身定做,例如自动驾驶车辆的图像处理和机器学习。云计算将通过聚合用户间的需求来鼓励这种多样性。
大部件
在后摩尔时代,性能工程、算法提升和硬件流线化在大型系统组件中是最有效的。一个很大的组件是通常超过一百万行代码的可重用软件、相当复杂的硬件或类似大小的软硬件混合体。本节讨论大型组件是获得顶层性能的肥沃土壤的技术和经济原因。
对系统的更改可以在工程师之间不太协调的情况下进行,只要这些更改不相互干扰。将代码分解成模块,并将其实现隐藏在接口后面,可以使开发更快,软件更健壮。模块化有助于性能工程,因为它意味着可以在不需要系统其余部分适应的情况下改进模块内的代码。同样,模块化有助于硬件的精简,因为硬件可以在不影响应用程序编程接口(API)的情况下重新构建。不需要协调的性能工程和硬件精简已经在以这种方式进行,我们希望他们继续这样做。
但是,提高性能的许多最有价值的未来机会将不会在单个模块内本地产生,而是来自影响系统主要部分的许多模块之间广泛而系统的变化。例如,由于太多的软件是缩减主义者,因此系统越大,当将精简和直接的实施替换为逐层缩减时,获得巨大性能提升的机会就越大。但是影响许多模块的大规模重新设计需要许多工程师的协调,这既昂贵又冒险。
大型系统组件(Web浏览器,数据库系统,操作系统,微处理器,GPU,编译器,磁盘存储系统等)既提供了使应用程序快速运行的技术机遇,又提供了在经济上可以利用它们的环境。作为一个大型组件中可以进行的更改类型的示例,请考虑一个微处理器。指令集体系结构(ISA)是一种接口,软件可通过该接口告诉处理器该做什么。制造商通常会进行重大的内部更改以提高性能,而无需更改ISA,因此旧软件可以继续正常运行。例如,1978年发布的Intel 8086拥有29,000个晶体管,而2016年发布的22核Xeon E5-2699 v4具有大约248,000倍的晶体管,其性能提高了100万倍以上,根据SPECint率。那时ISA的增长速度还不到4倍,而旧的程序会在表面增加新功能的情况下继续工作。
大的组件为获得绩效提供了很好的机会,但仅机会是不够的。要超过进行更改的成本和风险,必须存在经济动机。如果商业企业或非营利组织拥有一个大组件时,则可以证明投资是合理的,以提高绩效,因为它可以在完成工作时获得收益。单一所有权也有助于协调成本。如果许多方面都必须同意进行更改,但是仅需几个人就可以否决,那么更改就很难实现。如果涉及过多的参与方,即使是担心高昂的协调成本也可能阻止大型代码库中的更改。但是,当单个实体拥有很大的组成部分时,它就有能力进行巨大的更改并合并成本和收益。它可以选择重新设计尽可能多的模块,以使其经济上合理并仅在大型组件的界面上与外界进行协调。
结论
随着小型化的减弱,底部的硅制造技术改进将不再提供社会已经享有50多年的可预测的、广泛的计算机性能提升。顶尖的软件性能工程,算法开发和硬件流线化可以继续使后摩尔时代的计算机应用程序更快,这可以与摩尔定律多年来取得的成就相抗衡。然而,不像过去从底层获得的历史收益,顶层的收益将是机会主义的,参差不齐的,零星的,并且随着对问题的更好地探索,收益会不断下降。但是即使有机会,如果对组件的必要修改要求与其他组件兼容,也可能很难利用它们。大型组件可以使所有者从顶级性能提升中获得经济优势,同时最大程度地减少外部干扰。
除了顶层的技术外,新兴技术(例如3D堆叠,量子计算,光子学,超导电路,神经形态计算和石墨烯芯片)也可能从最底层推动发展。目前,这些技术正处于不断发展的过程中并且在可以预测的未来缺乏与当今基于硅半导体技术竞争的成熟度。尽管由于它们的长期潜力,我们对在底部的这些技术的投资表示赞赏,但我们认为,至少在短期内,大多数应用程序的性能提升将更多地来自顶部。
方法
Table 1
每次运行时间最少是在Amazon AWS c4.8xlarge竞价型实例(双插槽Intel Xeon E5-2666 v3系统,总共有60吉比特的内存)上运行五次。每个Xeon是一个2.9 GHz 18核CPU,具有25 MB共享的L3缓存。每个处理器内核都有一个32 KB的专用L1数据高速缓存和一个256 KB的专用L2高速缓存。该机器使用Linux内核4.0.4版本运行Fedora 22。 Python版本是使用Python 2.7.9执行的。 Java版本是使用OpenJDK 1.8.0_51版编译并运行的。所有其他版本均使用GNU编译器集合(GCC)5.2.1 20150826进行了编译。
Figure 1
从发布算法的那年开始,每条曲线都模拟了硬件改进如何提高固定的maxflow算法的性能。每种算法的性能以n = 1 0^12个顶点的图形数,m = n1.1〜15.8×1012边缘的图形数以及可以在固定时间内解决的64位整数容量来衡量,将其标准化为点从1开始。假设big-O隐藏的常数为1,我们基于big-O表示法根据其渐近复杂性来计算每种算法的性能。我们从考虑中排除了近似算法,因为这些算法不一定返回相同的定性回答。我们还排除了算法,这些算法陈述的渐近边界忽略了对数因子,以简化性能比较。我们确定了自1978年以来开发的四种最大流量算法,它们各自的性能比其前任提高了四倍以上:Edmonds和Karp’sO(m^2logU)算法;Sleator和Tarjan的O(mnlogn)算法;Ahuja, Orlin, and Tarjan’sO(mnlog(n*sqrt(logU)/m+2))算法;Goldberg和Rao的O(n^(2 / 3)mlog(n^2 / m)logU)算法(63)。每条曲线都根据SIPS的缩放MIPS(每秒百万条指令)估计值和记录在斯坦福大学C P U数据库中的SPECint分数,绘制了迄今为止任何处理器所能达到的最佳性能。使用与图2中相同的方法对这些处理器性能测量进行归一化。
图1忽略了最大流量算法性能的恒定因素,因为这些算法的类似设计实现不可用。不过,可以从图中推断出算法之间恒定因子变化的影响。例如,如果一种算法与后一种算法之间的常数因子大10倍,则后一种算法的曲线将低一个数量级(即,y轴上的距离减少一分之一)。
Figure 2
斯坦福大学(Stanford)的CPU数据库收集了不同处理器的性能指标。对于1992年之前发布的处理器,其性能通过记录为该处理器可以执行多少个MIPS的估计值来衡量。对于后续处理器,每次性能测量均对应于SPECint1992,SPECint1995,SPECint2000或SPECint2006基准上该处理器的最佳记录分数。使用SPECint2006比率得分,标准SPECint得分(灰色菱形)和吞吐量(彩色正方形)方面的多色表现的性能。所有SPECint性能得分均来自。除非找到更精确的发布日期,否则将把2004年之后发布的英特尔处理器的日期绘制为该处理器发布季度的第一天。通过缩放因子对不同SPECint基准测试的得分进行归一化,这些缩放因子是从连续版本的SPECint的得分的几何平均比中得出的,这些得分在两种版本上均进行了评估。MIPS估算值通过SPECint得分,以使SPECint1992上的得分为1对应于1 MIPS。
GPU逻辑集成到笔记本电脑微处理器中
我们从WikiChip获得了带芯片集成Intel微处理器的带批注的芯片照片,该照片始于2010年的Sandy Bridge。我们测量了每张带GPU注释的照片中的面积,并计算了该面积与芯片总面积的比值。英特尔的四核芯片大约有以下百分比用于GPU:Sandy Bridge(18%),Ivy Bridge(33%),Haswell(32%),Skylake(40%至60%,具体取决于版本),Kaby Lake( 37%)和咖啡湖(36%)。无法获得比Coffee Lake更新的带注释的英特尔微体系结构的照片,因此未包括在研究中。我们没有找到有关现代AMD处理器的足够信息,无法将其包括在本研究中。