There’s plenty of room at the Top: What will drive computer performance after Moore’s law?(论文翻译)

随着半导体微缩的局限性显现,摩尔定律的终结意味着计算机性能的提升将更多地依赖于软件性能工程、算法优化和硬件架构的创新。软件可以通过消除膨胀和定制硬件来提高效率,算法在新问题领域的应用和优化将继续提供性能增长,而硬件架构的简化和专业化将释放新的潜力。在后摩尔时代,这些领域的改进将是不均衡和零星的,但为计算机应用程序的持续加速提供了机会。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

REVIEW SUMMARY

BACKGROUND: 计算能力的提高可以为我们现代生活中习以为常的许多事情赢得很大一部分功劳:手机比25年前房间般大小的计算机性能更好,近一半世界的互联网接入,以及强大的超级计算机带来的药物发现。社会已经开始依赖性能随时间呈指数级增长的计算机。

计算机性能的大部分改进来自数十年来计算机组件的小型化,诺贝尔奖获得者物理学家理查德费曼在他 1959 年对美国物理学会的演讲“底部有足够的空间”中预见了这一趋势 . 1975 年,英特尔创始人戈登摩尔预测了这种小型化趋势的规律性,现在称为摩尔定律,直到最近,计算机芯片上的晶体管数量每 2 年翻一番。

不幸的是,半导体小型化作为提高计算机性能的可行方法正在失去动力——“底部”没有更多空间。 “如果计算能力的增长停滞,几乎所有行业的生产力都将面临挑战。 尽管如此,计算性能的增长机会仍然存在,尤其是在计算技术堆栈的“顶端”:软件、算法和硬件架构。
[外链图片转存失败,源站可能有防盗在这里插入!链机制,建描述]议将图片上https://传(imblog.gnimg.cn/eck2JG143c4ce7c2440a8863af216086.png1f9)(ht)]
(消除软件膨胀根据硬件特性定制软件 新问题领域 新机器模型 处理器简化领域专业化 )
(摩尔定律结束后的性能提升。 后摩尔时代,计算能力的提升将越来越多地来自计算堆栈“顶层”的技术,而不是“底层”的技术,这将扭转历史趋势。)

ADVANCES: 软件可以通过性能工程变得更有效率:重组软件以使其运行得更快。 性能工程可以消除程序中的低效率,即所谓的软件膨胀,这是由传统软件开发策略引起的,这些策略旨在最小化应用程序的开发时间而不是运行时间。 性能工程还可以根据运行软件的硬件定制软件,例如,利用并行处理器和矢量单元。

算法提供了更有效的解决问题的方法。 事实上,自 20 世纪 70 年代后期以来,解决最大流问题的时间因算法进步和硬件加速几乎一样多。 但是在给定算法问题上的进展是不均衡和零星的,并且最终必须面临收益递减。 因此,我们看到最大的好处来自新问题领域(例如机器学习)的算法和开发更好地反映新兴硬件的新理论机器模型。

硬件架构可以简化——例如,通过处理器简化,将复杂的处理核心替换为需要更少晶体管的更简单的核心。 然后可以通过其他方式重新部署腾出的晶体管预算——例如,通过增加并行运行的处理器内核的数量,这可以为可以利用并行性的问题带来巨大的效率增益。另一种形式的精简是领域专业化,其中硬件是为特定应用领域定制的。 这种类型的专业化抛弃了域不需要的处理器功能。 它还可以允许对域的特定特征进行更多自定义,例如,通过降低机器学习应用程序的浮点精度。

在后摩尔时代,软件、算法和硬件架构的性能改进将越来越需要跨堆栈其他级别的并行更改。 从工程管理和经济的角度来看,如果这些更改发生在大型系统组件中,这些更改将更容易实施:通常具有超过一百万行代码的可重用软件或具有相当复杂性的硬件。 当单个组织或公司控制一个大组件时,可以更轻松地重新设计模块化以获得性能提升。 此外,可以合并成本和收益,以便在同一组件的其他地方获得收益,从而证明在大型组件的一个部分进行重要但代价高昂的更改是合理的。

OUTLOOK: 随着微型化的减弱,底部硅制造的改进将不再提供社会已经享受了 50 多年的可预测的、广泛的计算机性能增益。 Top 的软件性能工程、算法开发和硬件精简可以继续使后摩尔时代的计算机应用程序更快。 然而,与底部的历史收益不同,顶部的收益将是机会主义的、不均衡的和零星的。 此外,随着特定计算得到更好的探索,它们将受到收益递减的影响。

REVIEW
50 多年来,半导体晶体管的小型化推动了计算机性能的增长。 随着微型化接近极限,摩尔定律终结,性能提升将需要来自软件、算法和硬件。 我们将这些技术称为计算堆栈的“顶部”,以区别于“底部”的传统技术:半导体物理和硅制造技术。 在后摩尔时代,Top 将提供可观的性能收益,但这些收益将是机会主义的、不均衡的、零星的,并且会受到收益递减规律的影响。 大型系统组件为应对高层工作的挑战提供了一个有前途的环境。

在过去的 50 年里,半导体设备的小型化一直是提高计算机性能的核心,正如物理学家理查德·费曼 (Richard Feynman) 在他 1959 年给美国物理学会的演讲 (1) 中所预见的那样,“底部有足够的空间。 ”英特尔创始人戈登·摩尔 (Gordon Moore) (2) 观察到小型化的稳定速度,并预测 (3) 每台计算机芯片的晶体管数量每 2 年翻一番——这一节奏被称为摩尔定律,直到最近一直保持得相当好。 此外,直到 2004 年左右,新的晶体管不仅体积更小,而且速度更快、更节能 (4),为计算机提供了更快的速度和更大的存储容量。 摩尔定律无处不在地推动着经济进步。

不幸的是,费曼的“底层空间”已经不多了。 国际半导体技术路线图[(5),第 36 页]预见到小型化的终结,微处理器技术的领导者英特尔[(6),第 14 页]已经承认摩尔节奏的终结。 事实上,英特尔在 2014 年生产了 14 纳米技术,但它在 2016 年生产 10 纳米技术上停滞不前,直到 2019 年 (7)。 尽管其他制造商继续小型化——例如,三星 Exynos9825(8) 和苹果 A13Bionic(9)——但他们也未能满足摩尔节奏。 底部没有更多空间。

为什么小型化停滞不前? 由于基本的物理限制——材料的物理特性在原子水平上发生变化——以及芯片制造的经济性,它正在停滞不前。 尽管半导体技术可能能够生产小至 2 纳米 (20Å) 的晶体管,但实际上,由于收益递减 (10),小型化可能会在 5 纳米左右结束。 即使半导体技术专家可以将事情推进得更远,随着我们接近原子尺度 (11, 12),这样做的成本也会急剧上升。

这里没看了
在这篇评论中,我们讨论了摩尔定律终结后计算机性能增长的替代途径。 我们相信机会可以在计算技术堆栈的更高层次中找到,我们称之为“顶层”。 ”相应地,我们所说的“底”指的是在摩尔时代飞速发展的半导体技术。 计算堆栈的各层利用底部的晶体管和其他半导体设备在顶部进行有用的计算,以解决现实世界的问题。 我们将 Top 分为三层:(i) 硬件架构——执行计算的可编程数字电路; (ii) 软件——指示数字电路计算内容的代码; (iii) 算法——组织计算的高效问题解决程序。 我们认为,即使底部的设备技术不再带来性能提升,顶部仍将继续提供机会。

与通过“提升所有船只”可预测地提高性能的摩尔定律不同,在高层工作以获得性能将产生机会主义的、不均衡的和零星的收益,通常一次只改进特定计算的一个方面。 对于任何给定的问题,收益都会受到收益递减法则的影响。 从长远来看,收益将取决于将计算应用于新问题,正如自数字计算机出现以来一直发生的那样。

在顶层工作以获得性能也不同于底层,因为它如何影响整个计算系统。 小型化提供的性能不需要对计算堆栈的上层进行实质性更改,因为计算中数字硬件、软件和数据的逻辑行为几乎完全独立于底部晶体管的大小。 因此,上层可以利用更小、更快的晶体管,而几乎不需要改变。 相比之下——不幸的是——Top 的许多部分相互依赖,因此当一个部分被重组以提高性能时,其他部分必须经常适应利用,甚至容忍变化。 当这些变化渗透到系统中时,可能需要大量的人力来正确实施和测试它们,这会增加成本和风险。 从历史上看,高层提高性能的策略与摩尔定律共存,并用于加速特定应用程序,这些应用程序需要的不仅仅是摩尔定律可以提供的自动性能增益。

在这里,我们认为顶部有足够的空间,我们概述了软件、算法和硬件三个领域中每一个领域的有前途的机会。 我们通过示例和数据分析探索这些领域的可用改进规模。 我们还讨论了为什么“大系统组件”将为在高层获得这些收益提供肥沃的土壤。

SOFTWARE
摩尔时代的软件开发通常侧重于最大限度地减少开发应用程序所需的时间,而不是在部署后运行该应用程序所需的时间。 这种策略导致程序效率极低,通常称为软件膨胀。 此外,许多现有软件未能利用芯片的架构特性,例如并行处理器和矢量单元。 在后摩尔时代,软件性能工程——重构软件以使其运行更快——可以通过消除膨胀和根据硬件架构的特定功能定制软件来帮助应用程序更快地运行。

为了说明性能工程的潜在收益,请考虑将两个 4096 x 4096 矩阵相乘的简单问题。 让我们从使用流行的高级编程语言 Python 编码的实现开始。 这是用于矩阵乘法的 Python2code 的四行内核:
在这里插入图片描述
该代码使用三个嵌套循环并遵循基本线性代数课程中教授的方法。 然而,事实证明,这种朴素的代码让现代计算机的大部分性能“搁置”。 ”代码在现代计算机上需要大约 7 小时来计算矩阵乘积,如表 1 第一行(版本 1)所示,仅达到机器峰值性能的 0.0006%。 (顺便说一句,Python3 需要大约 9 小时来完成相同的计算。)

在这里插入图片描述
(Table 1. 性能工程加速将两个 4096×4096 矩阵相乘的程序。 每个版本都代表原始 Python 代码的连续改进。 “运行时间”是版本的运行时间。 “GFLOPS”是该版本每秒执行的数十亿次 64 位浮点运算。 “绝对加速”是相对于 Python 的时间,而“相对加速”,我们以额外的精度显示,是相对于前一行的时间。 “Fraction of peak”是相对于计算机峰值 835GFLOPS 的 GFLOPS。 有关详细信息,请参阅方法。)

如何对这种朴素的矩阵乘法代码进行性能工程设计? 只需选择更高效的编程语言即可显着加快计算速度。 例如,用 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 小时快 60、000 倍!

这个例子的目的是说明性能工程天真编码软件的潜在收益。 在矩阵乘法的特殊情况下,优秀的程序员可以通过使用现有软件库中的优化代码来避免这种编程工作。 但是,如果她正在编写代码来解决新问题,她就需要自己优化代码。 虽然不是每个应用程序都可以通过性能工程提高近五个数量级,但大多数现代软件系统都包含大量性能增强的机会,尤其是在代码库足够大的情况下。

在后摩尔时代,让代码快速运行将变得越来越重要,特别是根据运行的硬件对其进行定制。 现代计算机提供旨在使代码快速运行的架构功能。 例如,版本 4 和 6 利用并行性,这是计算机同时执行多个操作的能力。 Version5利用局部性,这是计算机在内存中并置(空间局部性)或最近访问过(时间局部性)时有效访问数据元素的能力。 Version7 通过仔细协调使用 Intel 的 AVX 指令,同时利用了并行性和局部性。 正如我们将在硬件架构部分看到的那样,架构可能会变得越来越异构,同时包含通用和专用电路。 为了提高性能,程序将需要公开更多的并行性和局部性以供硬件利用。 此外,软件性能工程师将需要与硬件架构师合作,以便新处理器提供简单而引人注目的抽象,从而尽可能轻松地利用硬件。

除了软件与硬件的定制之外,还有膨胀问题:软件膨胀从何而来? 当然,一些膨胀来自于效率与其他理想特性的权衡,例如编码简便性,正如矩阵乘法代码的版本 1 到 3 所说明的那样。 膨胀还来自未能根据底层架构定制代码,如版本 4 到 7 所示。 但是很多软件膨胀都源于软件开发策略 (13, 14),例如缩减。

减少的想法是这样的。 想象一下,你是一名程序员,被要求解决一个问题 A(例如,区分是或否的口头回答)。 你可以编写专门的代码来直接解决 A,但你可能会注意到相关的问题 B 已经解决了(现有的语音识别软件可以理解很多词,包括是和否)。 通过将 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 多倍。

事实上,简单的代码往往很慢,而快速的代码往往很复杂。 为了创造一个可以轻松编写快速代码的世界,应用程序程序员必须具备对其代码进行性能工程的知识和技能,并且必须大大改进辅助生产力的工具。

抽象地,软件性能工程可以被看作是一个涉及单个循环的简单过程:(i) 测量程序 A 的性能。(ii) 对程序 A 进行更改以产生一个有望更快的程序 A’。 (iii) 测量程序 A’ 的性能。 (iv) 如果 A’beats A,则设置 A=A’。 (v) 如果 A 仍然不够快,转到 (ii)。 但是今天,我们的系统已经足够复杂,以至于必须经常重复测量很多次才能建立一个程序版本优于另一个程序版本的信心。

随着硬件变得越来越专业化和异构化(参见硬件架构部分),编写高性能代码将变得更加困难。 由于在后摩尔时代更快的软件对于更好的性能将变得越来越重要,因此计算行业、研究人员和政府都应该积极开发性能工程技术。

Algorithm
算法的进步已经为性能增长做出了很多贡献,并将在未来继续这样做。 一个主要目标是以较少的计算工作来解决问题。 例如,通过使用 Strassen 的算法(15)进行矩阵乘法,表 1 的版本 7 中高度优化的代码可以提高约 10%。 对于某些问题,收益可能更令人印象深刻:总统科学技术顾问委员会在 2010 年得出结论,“算法改进带来的性能提升甚至远远超过了处理器速度提高带来的显着性能提升”(强调他们的)[ (16),第 71 页]。

然而,由于算法设计需要人类的聪明才智,因此很难预料会取得进展。 为了说明算法进展的本质,考虑寻找网络中最大流量的经典运筹学问题 [(17),第 26 章],它可用于模拟道路网络中的交通运动、血液通过循环系统 系统,或电路中的电。 线性规划是解决最大流问题的直接方法,但在 1975 年至 1995 年的 20 年间,出现了一系列算法创新,大大改进了它。

图 1 显示了最大流算法随时间的进展。 最佳算法的性能增益与摩尔定律在 38 年数据中的增益相媲美(略高于 4 个数量级与略低于 5 个数量级),尽管在过去 20 年中没有新算法提高该特定问题的性能。 这个例子突出了关于算法的三个显着观察结果:(i)给定算法问题的进展不均匀且零星地发生。 (ii) 算法带来的好处 图 1 显示了最大流算法随时间的进展。 最佳算法的性能增益与摩尔定律在 38 年数据中的增益相媲美(略高于 4 个数量级与略低于 5 个数量级),尽管在过去 20 年中没有新算法提高该特定问题的性能。 这个例子突出了关于算法的三个显着观察结果:(i)给定算法问题的进展不均匀且零星地发生。 (ii) 算法创新带来的好处可以与摩尔定律相媲美。 (iii) 解决任何给定问题的算法改进最终必须减少。
在这里插入图片描述
(图。1。 解决具有 n=1012 个顶点和 m=n1.1 个边的图上的最大流问题的主要算法进步。 纵轴显示了有多少问题(归一化到 1978 年)理论上可以在固定时间内用当年最好的微处理器系统解决。 每个主要算法都在其发明年份中显示为一个圆圈,除了第一个,它是 1978 年最好的算法。 虚线轨迹显示更快的计算机[根据斯坦福 CPU 数据库 (56) 中的 SPECint 分数衡量]如何使每个算法随着时间的推移变得更快。 黑色实线显示在任何时间点使用最佳计算机的最佳算法。 如方法中所述,每种算法的性能都是通过其渐近复杂性来衡量的。)

然而,因为这个例子关注的是一个众所周知的问题,所以它忽略了算法性能工程如何加速计算的一个关键方面:通过为新问题提供有效的解决方案。 例如,在 2016 年美国计算机协会 (ACM) 离散算法研讨会上,146 篇论文中超过四分之一的重点是以前没有用算法研究过的问题。 因此,尽管对旧问题的研究可能仍会产生边际收益,但算法的大部分进展将来自三个来源:(i)攻击新问题领域,(ii)解决可扩展性问题,以及(iii)定制算法以利用 现代硬件。 我们依次讨论每个来源。

新的问题领域不断产生对新算法的需求。 30 年前,机器学习、社交网络、安全、机器人、博弈论、传感器网络和视频编码等领域很小或根本不存在,但现在在经济上的重要性足以需要高效的算法。 由于算法,许多公司获得了竞争优势。 谷歌的 PageRank 算法 (18) 使其万维网搜索更胜一筹,而谷歌 AdWords (19) 的拍卖算法允许广告商根据用户的搜索词竞标显示空间,从而使其获得高额利润。 内容交付网络在 2016 年交付了一半以上的互联网流量 (20),它依赖于有效的算法来避免拥塞。 许多科学也依赖于好的算法。 例如,计算生物学中的 DNA 测序依赖于高效的动态规划算法 (21)。

摩尔定律已使当今的高端计算机能够在主内存中存储超过 1 TB 的数据,并且由于问题规模相应增加,因此需要高效的算法来使解决方案负担得起。 次线性算法 (22, 23) 提供了一个如何解决规模问题的示例。 例如,要找到一万亿个数字的中位数,仅读取输入数据就至少需要一万亿次内存操作。 但是许多问题不需要精确的中位数,并且只需要对中位数进行良好的估计就可以很好地解决问题。 对于这些问题,我们可以取而代之的是提取一个随机样本,比如一百万个数字,然后计算该样本的中值。 结果是对真实中位数的高度准确估计,计算速度可以提高一百万倍。 算法领域充满了处理可扩展性的策略。

定制算法以利用现代硬件可以使其更快(表 1)。 尽管如此,今天的大多数算法仍然是使用最初在 20 世纪 60 年代和 70 年代开发的串行随机存取机器模型 (24) 设计的,该模型假设处理器一次只能执行一个操作,并且访问内存任何部分的成本是 相同。 此类算法经常低效地使用现代硬件,因为它们没有充分利用机器的许多并行处理内核和矢量单元,每个内核和矢量单元每个时钟周期都可以执行许多操作,并且它们无法利用缓存,这可以将数据访问速度提高两个数量级。

尽管算法研究已经为现代计算机的显着特征开发了数学模型,例如并行和矢量处理 (25-32) 以及缓存层次结构 (33-35),但算法和实现之间仍然存在巨大差距。 部分问题在于每个模型往往只解决一个方面——例如并行性、向量单元或缓存——然而为现代计算机定制算法需要了解所有这些方面。 此外,为了获得每一点性能,一些硬件特性——例如同时多线程、动态电压和频率缩放、直接映射缓存和各种专用指令——实际上使得为硬件定制算法变得更加困难, 因为它们会导致简单的理论模型无法轻易捕捉到的可变性和不可预测性。

一种可能的解决方案是 autotuning(36, 37),它搜索可能实现的参数化空间以找到最快的实现。 借助现代机器学习,甚至可能包含差异超过几个参数值的实现。 不幸的是,自动调整和机器学习往往过于耗时,无法要求每个算法都产生如此大的前期成本。 此外,这些方法实际上使算法设计更加困难,因为设计人员无法轻易理解设计选择的后果。 在后摩尔时代,算法设计师和硬件架构师必须共同努力,找到设计师可以理解、架构师可以高效实现的简单抽象。

Hardware architecture
从历史上看,计算机架构师使用越来越多的晶体管来使串行计算运行得更快,从而大大增加了处理核心的复杂性,尽管性能的提高会随着时间的推移而减少回报 (38)。 我们认为,在后摩尔时代,架构师将需要采取相反的策略并专注于硬件精简:使用更少的晶体管和更少的硅面积来实现硬件功能。

正如我们将要看到的,硬件流线型的主要优势来自于为更多电路并行运行提供额外的芯片面积。 因此,具有充分并行性的应用程序将获得最大的收益。 事实上,没有多少并行性的应用程序的硬件性能已经停滞不前。 但在许多新兴应用领域,如机器学习、图形、视频和图像处理、传感计算和信号处理,都存在大量并行性。 计算机架构师应该能够设计流线型架构,以便在摩尔定律结束后的许多年内为这些领域和其他领域提供更高的性能。

我们可以通过历史数据来观察架构对并行性的依赖趋势。 图 2 绘制了微处理器的三组基准数据:SPECint 性能(黑色方块和灰色菱形)、SPECintrate 性能(黑色、橙色、蓝色和红色方块)和微处理器时钟频率(绿色圆点)。 如图中的绿点所示,从 1985 年到 2005 年,时钟速度增加了 200 多倍,之后由于 Dennard 缩放结束而趋于稳定,我们将在稍后讨论。 在 Dennard 缩放时代时钟速度的提高和其他架构变化的推动下,微处理器性能迅速提高,正如 SPECint 和 SPECintrate 基准测试(黑色方块)所测量的那样,其旨在对典型用户工作负载的计算机性能进行建模 (39)。 SPECint 基准测试主要由串行代码组成,而 SPECint-rate 基准测试是并行的。 这两个基准测试在单处理器计算机上执行相同。 但在 2004 年之后,随着机器增加了多核和其他形式的显式并行性,两者出现了分歧。 事实上,从 2004 年到 2015 年,每年性能最好的芯片(彩色方块)上的并行应用性能增长了 30 倍,平均每 2 年提高约两倍。 相比之下,在同一时间段内,大部分串行 SPECint 基准(灰色菱形)仅按比例放大了三倍。
在这里插入图片描述
(图 2。 1985 年至 2015 年微处理器的 SPECint(主要是串行)性能、SPECint 速率(并行)性能和时钟频率缩放,于 1985 年标准化为 Intel80386DX 微处理器。 微处理器及其时钟频率来自斯坦福 CPU 数据库 (56)。 微处理器性能是根据从 (39) 获得的 SPECint 和 SPECint-rate 性能基准的缩放性能分数来衡量的。 (有关详细信息,请参阅方法。)黑色方块标识单核处理器,其 SPECint 和 SPECint-rate 基准性能相同。 橙色、蓝色和红色方块绘制了各种多核处理器的 SPECint-rate 基准性能,其中橙色方块表示具有 2 至 3 个内核的处理器,蓝色方块表示具有 4 至 7 个内核的处理器,红色方块表示具有 8 个或更多内核的处理器 . 灰色菱形绘制了多核处理器上的 SPECint 基准性能。 圆形绿点绘制处理器时钟频率(也归一化为 Intel80386)。 灰色背景突出Dennard-scaling时代(名义上到2004年),白色背景突出多核时代(beyond2004)。)

除了并行性之外,应用程序还需要局部性才能从精简中获益。 例如,当数据从外部动态随机存取存储器 (DRAM) 存储芯片传输到处理芯片时,在传回之前应该使用多次。 对于局部性很小的应用程序,增加并行性会导致流向片外内存的流量成比例增加,并最终超过其内存通道的带宽,因此应用程序受内存限制。 然而,对于具有良好局部性的应用程序,随着并行度的增加,片外内存流量的增加速度要慢得多,从而使所有芯片的计算引擎都能在不闲置的情况下完成有用的工作。 幸运的是,许多重要的应用领域都包含大量的局部性和并行性。

硬件流线化可以通过其他方式利用局部性,特别是对于特定领域的处理器,我们将在稍后讨论。 例如,显式数据编排 (40) 利用局部性来提高数据在整个内存层次结构中移动的效率 [(41),第 4 章]。 如果使用它们的应用程序包含局部性,片上互连可以变得更简单并且消耗更少的功率和面积。 例如,脉动阵列 (42) 可以使用面积高效的网格互连比通用互连更有效地执行矩阵计算。

虽然硬件会因为精简而提升性能,但我们认为摩尔定律结束后平均时钟速度不会增加,实际上可能会略有下降。 图 2 显示时钟速度在 2005 年趋于稳定,当时微处理器设计受到功率限制。 2004 年之前,计算机架构师找到了在不达到硬功率限制的情况下提高时钟频率的方法。 Dennard 缩放——随着时钟频率的增加而降低电压——允许处理器在不增加功耗的情况下运行得更快。 (在实践中,处理器制造商经常在不按比例降低电压的情况下提高时钟频率,这确实增加了芯片功率。)然而,自 2004 年以来,摩尔定律为每个芯片提供了更多的晶体管,但因为为它们供电的能力并没有明显增长(43) ,架构师被迫进行创新以防止时钟速率下降。 稍低的时钟频率和电源电压会降低每个晶体管的功率,足以让更多的电路可以并行运行。 如果工作负载具有足够的并行性,则增加的计算量足以补偿较慢的时钟。 串行应用程序的性能可能会稍差一些,但聪明的做法可以降低这种成本。 例如,Intel 的“Turbo”模式 [(41),第 28 页],当活动内核较少时,时钟运行速度更快。 (其他减少晶体管开关的技术包括在高速缓存中使用更多晶体管、对未使用的电路进行电源门控以及最小化信号开关。)

现在设计人员已经接受了并行性,主要问题将是如何简化处理器以利用应用程序并行性。 我们预计两种策略将占主导地位:处理器简化和领域专业化。

处理器简化 (44) 将复杂的处理核心替换为需要更少晶体管的更简单的核心。 现代核心包含许多使串行指令流运行得更快的昂贵机制,例如推测执行 [(41),第 3.6 节],其中硬件猜测并追求代码执行的未来路径,如果猜测错误则中止并重新执行。 如果一个内核可以简化为占据一半的晶体管,那么芯片上可以容纳两倍的内核。 为了使这种权衡有价值,工作负载必须具有足够的并行性以使额外的内核保持忙碌,并且两个简化的内核必须比单个复杂的内核执行更多有用的计算。

领域专业化 (11, 43, 45) 可能比简化更重要。 为应用领域定制的硬件可以更加精简并使用更少的晶体管,从而使应用程序的运行速度提高数十到数百倍 (46)。 也许今天最好的例子是图形处理单元 (GPU)[(41),第 4.4 节],它包含许多并行“通道”,具有专用于计算机图形的流线型处理器。 GPU 在图形计算上提供了更高的性能,尽管它们的时钟速度更慢,因为它们可以利用更多的并行性。 集成到笔记本电脑微处理器中的 GPU 逻辑从 2010 年芯片面积的 15% 到 25% 增长到 2017 年的 40% 以上(参见方法),这表明 GPU 加速器的重要性。 此外,根据跟踪高性能计算技术的 Top500 网站的数据,2012 年加入 Top500 名单的超级计算机中只有约 10% 包含加速器(通常是 GPU),但到 2017 年,这一份额已增长到 38%(12)。 Hennessy 和 Patterson(45) 预见了从通用架构向特定领域架构的转变,这些架构运行大型系统的小型计算密集型内核来完成诸如对象识别或语音理解等任务。 关键要求是应用程序领域中最昂贵的计算具有大量的并行性和局部性。

专用处理器通常首先作为通用处理器的附加设备实现。 但是,鼓励专业化的力量必须与要求扩展的力量相平衡:扩展专用处理器的功能,使其更独立于通用处理器,并更广泛地用于其他应用领域 (47)。

GPU 的发展证明了这种权衡。 GPU 最初是专门为渲染图形而开发的,因此,GPU 几乎无法用于许多其他计算任务,例如编译计算机程序或运行操作系统。 但是 GPU 已经扩展到可以方便地处理各种非图形任务,例如线性代数。 考虑软件部分的矩阵乘法问题。 Advanced Micro Devices (AMD) FirePro S9150GPU(48) 仅需 70 毫秒即可生成结果,比优化后的代码(版本 7)快 5.4 倍,比原始 Python 代码(版本 1)快 360、000 倍。

作为扩展和专业化之间权衡的另一个例子,GPU 对于“深度学习”革命 (49) 至关重要,因为它们能够训练通用处理器无法训练的大型神经网络 (50, 51) 足够快。 但专业化也取得了成功。 谷歌开发了一种专为深度学习设计的张量处理单元 (TPU)(52),包含专用处理并避开 GPU 的更广泛功能。

在摩尔时代,专业化通常让位于扩大化,因为开发专用设备的投资回报必须在摩尔定律生产出性能同样出色的通用处理器之前的有限时间内通过销售摊销。 然而,在后摩尔时代,我们期望看到更多的专用设备,因为它们不会有性能相当的通用处理器指日可待,与之竞争。 我们还期待专用于不同应用领域的多种硬件加速器,以及混合专业化,其中单个设备针对多个领域量身定制,例如自动驾驶车辆的图像处理和机器学习 (53)。 云计算将通过聚合跨用户的需求 (12) 来鼓励这种多样性。

Big components
在后摩尔时代,性能工程、算法开发和硬件优化将在大型系统组件中发挥最大作用 (54)。 大型组件是可重用的软件,通常有超过一百万行代码、相当复杂的硬件,或者类似的大型软件硬件混合体。 本节讨论为什么大型组件是获得顶级性能的沃土的技术和经济原因。

对系统的更改可以在工程师之间无需太多协调的情况下进行,只要这些更改不会相互干扰即可。 将代码分解为模块并将其实现隐藏在接口后面可以加快开发速度并使软件更加健壮 (55)。 模块化有助于性能工程,因为这意味着可以改进模块内的代码,而无需系统的其余部分进行调整。 同样,模块化有助于硬件精简,因为可以在不影响应用程序编程接口 (API) 的情况下重组硬件。 不需要协调的性能工程和硬件精简已经以这种方式发生,我们希望他们继续这样做。

然而,未来许多最有价值的提高性能的机会不会出现在单个模块的本地,而是来自影响系统主要部分的许多模块的广泛和系统的变化。 例如,由于太多的软件是简化的,系统越大,当层层简化被精简和直接的实现所取代时,获得巨大性能提升的机会就越大。 但是涉及到很多模块的大规模重构需要很多工程师的协调,成本高,风险大。

大型系统组件(网络浏览器、数据库系统、操作系统、微处理器、GPU、编译器、磁盘存储系统等)既提供了使应用程序快速运行的技术机会,也提供了利用它们在经济上可行的环境 . 作为可以在大型组件中进行的更改类型的示例,请考虑微处理器。 指令集架构 (ISA) 是软件告诉处理器做什么的接口。 制造商通常会在不更改 ISA 的情况下进行重大的内部更改以提高性能,以便旧软件继续正确运行。 例如,根据 SPECint 率 (39),1978 年发布的 Intel8086 有 29,000 个晶体管 (56),而 2016 年发布的 22 核 Xeon E5-2699v4 拥有大约 248,000 倍的晶体管 (57),可产生超过一百万倍的性能 . 在那段时间里,ISA 增长了不到四倍 (58),即使接口添加了新功能,旧程序仍能继续工作。

大组件提供了获得性能的好机会,但仅有机会是不够的。 为了抵消做出改变的成本和风险,必须存在经济激励。 如果一家商业企业或非营利组织拥有一个很大的组成部分,它可以证明为提高性能而进行的投资是合理的,因为它会在工作完成后获得收益。 单一所有权也有助于降低协调成本。 如果必须有很多人同意才能做出改变,但只需要少数人就可以否决,那么改变就很难发生。 如果涉及的各方太多,即使是对高协调成本的恐惧也会阻碍大型代码库的更改。 但是当一个实体拥有一个大组件时,它就有能力做出巨大的改变并集中成本和收益。 它可以选择重新设计尽可能多的模块,因为它可以在经济上证明是合理的,并且只在大组件的接口上与外界协调。

Conclusion
随着微型化的减弱,底部硅制造的改进将不再提供社会已经享受了 50 多年的可预测的、广泛的计算机性能增益。 Top 的软件性能工程、算法开发和硬件精简可以在后摩尔时代继续使计算机应用程序更快,与摩尔定律多年来积累的收益相媲美。 然而,与底部的历史收益不同,顶部的收益将是机会主义的、不均衡的、零星的,并且随着问题得到更好的探索而受到收益递减的影响。 但即使存在机会,如果对组件的必要修改需要与其他组件兼容,也可能很难利用它们。 大型组件可以让它们的所有者从高层的性能提升中获得经济优势,同时最大限度地减少外部干扰。

除了顶部的潜力之外,新兴技术——例如 3D 堆叠、量子计算、光子学、超导电路、神经形态计算和石墨烯芯片——可能会从底部提供推动力。 目前,这些技术还处于起步阶段,缺乏成熟度,无法在不久的将来与当今的硅基半导体技术竞争 (59)。 尽管我们赞成对这些底层技术的投资,因为它们具有长期潜力,但我们认为,至少在短期内,大多数应用程序的性能提升更有可能源自顶层。

Methods
Table1
每次运行时间是在 Amazon AWS c4.8xlarge spot 实例上运行的最少五次,这是一个双路英特尔至强 E5-2666v3 系统,总内存为 60 GB。 每个 Xeon 都是一个 2.9 GHz 的 18 核 CPU,带有一个共享的 25 兆字节 L3 高速缓存。 每个处理器内核都有一个 32-kibibyte (KiB) 的私有 L1 数据缓存和一个 256-KiB 的私有 L2 缓存。 机器运行的是Fedora22,使用的是4.0.4版本的Linux内核。 Python版本使用Python2.7.9执行。 Java版本使用OpenJDK version1.8.0_51编译运行。 所有其他版本均使用 GNU Compiler Collection (GCC) 5.2.120150826 编译。

Figure1
从算法发布的那一年开始,每条曲线都模拟了硬件改进如何提高固定最大流量算法的性能。 每个算法的性能被测量为 n=1012 个顶点,m=n1.1~15.8×1012 个边的图的数量,以及可以在固定时间内解决的 64 位整数容量,归一化使得第一个点开始 在1。 我们根据大 O 符号的渐近复杂度计算每个算法的性能,假设大 O 隐藏的常量为 1。 我们从考虑中排除了近似算法,因为这些算法不一定返回相同的定性答案。 我们还排除了其规定的渐近边界忽略对数因子以简化性能比较的算法。 我们确定了自 1978 年以来开发的四种最大流算法,每种算法的性能都比其前身提高了四倍以上:Edmonds 和 Karp 的 O(m2logU) 算法 (60); Sleator 和 Tarjan 的 O(mnlogn) 算法(61); Ahuja、Orlin 和 Tarjan 的 Oðmnlogðn ffiffiffiffiffiffiffiffiffiff logU p=mþ2ÞÞ 算法 (62); 以及 Goldberg 和 Rao 的 O(n2/3mlog(n2/m) logU) 算法 (63)。 每条曲线都根据斯坦福 CPU 数据库 (56) 中记录的缩放 MIPS(每秒百万条指令)估计和 SPECint 分数绘制了迄今为止任何处理器实现的最佳性能。 使用与图 2 中相同的方法对这些处理器性能测量值进行归一化。

图 1 忽略了最大流算法性能中的常数因素,因为这些算法的类似工程实现不可用。 然而,可以从图中推断出算法之间常数因子变化的影响。 例如,如果一个算法与后一个算法之间的常数因子大 10 倍,则后一个算法的曲线将低一个数量级(即,在 y 轴上少一个分度)。

Figure 2
不同处理器的性能测量数据来自斯坦福的 CPU 数据库 (56)。 对于 1992 年之前发布的处理器,其性能是根据记录的处理器可以执行多少 MIPS 的估计值来衡量的。 对于后续处理器,每个性能测量值对应于该处理器在 SPECint1992、SPECint1995、SPECint2000 或 SPECint2006 基准测试中的最佳记录分数。 多核处理器的性能使用标准 SPECint 分数(灰色菱形)和吞吐量(彩色方块)使用 SPECint2006rate 分数来衡量。 所有 SPECint 性能评分均来自 (39)。 除非找到更准确的发布日期,否则 2004 年之后发布的英特尔处理器的日期被绘制为该处理器发布季度的第一天。 不同 SPECint 基准测试的分数通过比例因子进行归一化,比例因子是根据在两个版本上评估的处理器的连续 SPECint 版本分数的几何平均比率计算得出的。 MIPS 估计值已使用 SPECint 分数标准化,因此 SPECint1992 上的 1 分对应于 1 MIPS。

GPU logic integrated into laptop microprocessors
我们从 WikiChip(57) 获得了带有集成 GPU 的英特尔微处理器的注释芯片照片,该照片始于 2010 年的 Sandy Bridge。 我们测量了专用于 GPU 的每张带注释照片中的面积,并计算了该面积与芯片总面积的比率。 英特尔的四核芯片大约有以下百分比用于 GPU:Sandy Bridge(18%)、Ivy Bridge(33%)、Haswell(32%)、Skylake(40-60%,取决于版本)、Kaby Lake(37%) ) 和咖啡湖 (36%)。 比 Coffee Lake 更新的英特尔微架构的带注释裸片照片不可用,因此未包含在研究中。 我们没有找到有关现代 AMD 处理器的足够信息,无法将其纳入本研究。

Reference
略…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值