41. Summary and Concluding Remarks

总结和结束语
AP SHANTHI博士

 

本模块的目标是总结我们迄今为止在计算机体系结构课程中讨论的各种概念,并讨论未来的趋势。

 

计算机体系结构的基本概念可以在下面列出的以下八个想法的帮助下精美地描述。根据 David A. Patterson 的说法,“计算机来来去去,但这些想法已经贯穿了 60 年 的计算机设计”。David A. Patterson 博士是计算机科学的先驱,自 1977 年以来一直在加州大学伯克利分校教授计算机体系结构。他是经典著作《计算机组织 与设计》和《计算机体系结构:定量方法》的合著者我们在整个课程中都使用了它。他的合著者是斯坦福大学校长 John L. Hennessy 博士,他自 1977 年以来一直是斯坦福大学电气工程和计算机科学系的教员。这是计算机架构师在过去 60 年的计算机设计中发明的八个伟大的想法。它们非常强大,在使用它们的第一台计算机之后已经持续了很长时间,新的建筑师通过模仿他们的前辈来展示他们的钦佩。让我们详细讨论它们中的每一个。

 

1.  摩尔定律设计:计算机设计师的一个常数是快速变化,这在很大程度上是由摩尔定律驱动的。摩尔定律,正如我们之前看到的,我们观察到密集集成电路中的晶体管数量大约每两年翻一番。这一观察结果以仙童半导体和英特尔的联合创始人戈登摩尔命名,他 1965 年的论文描述了每个集成电路的组件数量每年翻一番,并预计这种增长速度将至少持续十年。1975 年,展望下一个十年,他将预测修改为每两年翻一番。这段时间通常被引用为 18 个月,因为英特尔高管大卫·豪斯 (David House) 预测芯片性能将每 18 个月翻一番,这是更多晶体管和晶体管速度更快的综合效应。

 

几十年来,摩尔的预测被证明是准确的,并已在半导体行业中用于指导长期规划和设定研发目标。由于计算机设计可能需要数年时间,因此在项目开始和结束之间,每个芯片的可用资源很容易翻倍或翻两番。

 

因此,计算机架构师必须预测设计完成后技术的发展方向,而不是设计起点。

 

摩尔定律是一种观察或投影,而不是物理或自然定律。尽管该比率从 1975 年到 2012 年左右保持稳定,但在第一个十年中速度更快。一般来说,从历史增长率推断不确定的未来在逻辑上是不合理的。例如,2010 年更新的国际半导体技术路线图预测增长将在 2013 年左右放缓,而戈登摩尔在 2015 年预测进展速度将达到饱和。

 

英特尔在 2015 年表示,进步的步伐已经放缓,从 2012 年左右的 22 纳米特征宽度开始,一直持续到 14 纳米。英特尔首席执行官布赖恩·科再奇 (Brian Krzanich) 宣布:“我们今天的节奏比两年更接近两年半。” 这计划在 2017 年底保持 10 纳米宽度。他引用摩尔 1975 年的修订作为当前减速的先例,这是由技术挑战造成的,是“摩尔定律历史的自然组成部分”。

 

2. 使用抽象来简化设计:计算机架构师和程序员都必须发明技术以提高生产力,否则设计时间会随着摩尔定律增加的资源而显着延长。硬件和软件的主要生产力技术是使用抽象来表示不同级别的设计;隐藏较低级别的细节以在较高级别提供更简单的模型。抽象是指忽略不相关的细节并专注于更高级别的设计/实现问题。抽象可以在多个级别使用,每个级别隐藏其下级别的细节。例如,处理器的指令集隐藏了执行指令所涉及的活动的细节。高级语言隐藏了完成任务所需的指令序列的细节。

 

3.   加快常见情况:计算机性能最显着的改进来自对常见情况的改进,即通常执行的计算,而不是优化罕见情况。罕见的情况并不经常遇到,因此,即使处理器没有优化来执行它并花费更多时间也没关系。具有讽刺意味的是,普通情况通常比罕见情况更简单,因此通常更容易增强。可以通过仔细的实验​​和测量来识别常见的情况。我们已经讨论了

 

提出这个想法的阿姆达尔定律。回想一下,阿姆达尔定律是衡量绩效的量化手段,与收益递减定律密切相关。

 

4. 并行性能:自从计算诞生以来,计算机架构师就提供了通过利用应用程序表现出的并行性来获得更高性能的设计。应用程序中基本上存在两种类型的并行性。它们是 – 数据级并行 (DLP),因为有许多数据项可以并行操作,而任务级并行 (TLP) 是因为创建的工作任务可以独立和并行操作而出现。计算机系统以四种主要方式利用应用程序展示的 DLP 和 TLP。指令级并行 (ILP) 使用具有流水线、动态调度和推测执行等思想的编译器的帮助,在适度的级别利用 DLP。矢量架构和 GPU 利用 DLP。线程级并行在允许线程间交互的紧密耦合硬件模型中利用 DLP 或 TLP。请求级并行 (RPL) 利用程序员或操作系统指定的大量解耦任务之间的并行性。仓库级计算机利用请求级并行性和数据级并行性。我们在之前的模块中详细讨论了所有这些架构风格。我们还讨论了对多核架构的需求,多核架构基本上属于 MIMD 架构类型,以及这些架构如何利用 ILP、DLP 和 TLP。我们查看的多核架构的各种案例研究为我们提供了有关哪种类型的并行性被利用最多以及如何利用的详细信息。请求级并行 (RPL) 利用程序员或操作系统指定的大量解耦任务之间的并行性。仓库级计算机利用请求级并行性和数据级并行性。我们在之前的模块中详细讨论了所有这些架构风格。我们还讨论了对多核架构的需求,多核架构基本上属于 MIMD 架构类型,以及这些架构如何利用 ILP、DLP 和 TLP。我们查看的多核架构的各种案例研究为我们提供了有关哪种类型的并行性被利用最多以及如何利用的详细信息。请求级并行 (RPL) 利用程序员或操作系统指定的大量解耦任务之间的并行性。仓库级计算机利用请求级并行性和数据级并行性。我们在之前的模块中详细讨论了所有这些架构风格。我们还讨论了对多核架构的需求,多核架构基本上属于 MIMD 架构类型,以及这些架构如何利用 ILP、DLP 和 TLP。我们查看的多核架构的各种案例研究为我们提供了有关哪种类型的并行性被利用最多以及如何利用的详细信息。我们在之前的模块中详细讨论了所有这些架构风格。我们还讨论了对多核架构的需求,多核架构基本上属于 MIMD 架构类型,以及这些架构如何利用 ILP、DLP 和 TLP。我们查看的多核架构的各种案例研究为我们提供了有关哪种类型的并行性被利用最多以及如何利用的详细信息。我们在之前的模块中详细讨论了所有这些架构风格。我们还讨论了对多核架构的需求,多核架构基本上属于 MIMD 架构类型,以及这些架构如何利用 ILP、DLP 和 TLP。我们查看的多核架构的各种案例研究为我们提供了有关哪种类型的并行性被利用最多以及如何利用的详细信息。

 

5. 流水线性能:流水线是一种在单处理器机器中利用并行性的方法。它构成了利用 ILP 的主要方法。它本质上像在流水线中一样处理指令执行中涉及的活动。指令周期可以分成几个独立的步骤,一旦指令的第一个活动完成,您就将其移动到第二个活动并开始新指令的第一个活动。这导致指令的重叠执行,与在开始第二条指令之前等待第一条指令的所有活动完成相比,这导致每单位时间执行更多指令。我们已经详细讨论了流水线的基础知识,它是如何实现的,还重点讨论了管道中可能发生的各种危险和可能的解决方案。

 

6.  通过预测表现:在某些情况下,假设从错误预测中恢复的机制不是太昂贵并且您的预测相对准确,那么猜测并开始工作平均会更快,而不是等到您确定知道为止。我们通常在编译器级别和架构级别使用预测来提高性能。例如,我们知道条件分支是一种指令,它根据条件测试确定要执行的下一条指令。条件分支对于实现高级语言 if 语句和循环是必不可少的。不幸的是,条件分支会干扰流水线的顺利运行——直到条件被测试后,处理器才知道从哪里获取下一条指令。许多现代处理器减少了 the impact of branches with speculative execution – make an informed guess about the outcome of the condition test and start executing the indicated instruction. Performance is improved if the guesses are reasonably accurate and the penalty of wrong guesses is not too severe. We have discussed in detail about the various branch predictors and speculative execution in our earlier modules.

 

7.  Hierarchy of memories: 程序员希望内存速度快、容量大、价格便宜,因为内存速度通常会影响性能,容量限制了可以解决的问题的大小,而今天的内存成本通常是计算机成本的主要部分。架构师发现,他们可以通过存储层次结构来解决这些相互冲突的需求,层次结构顶部的每比特最快、最小和最昂贵的内存位于层次结构顶部,而最慢、最大和最便宜的每比特内存位于底部。高速缓存给程序员一种错觉,即主内存几乎与层次结构的顶部一样快,而与层次结构的底部几乎一样大且便宜。我们已经详细讨论了各种缓存映射策略,以及如何通过各种优化技术提高分层内存系统的性能。

 

8. 冗余带来的可靠性:最后,计算机不仅需要速度快,还需要可靠。由于任何物理设备都可能发生故障,因此我们必须通过包含可以在发生故障时接管并帮助检测故障的冗余组件来使系统可靠。我们在仓库级计算机的模块中讨论了这个问题,其中可靠性非常重要。

 

与构建越来越好的架构相关的挑战始终存在。不断提高的性能和不断降低的成本使计算机变得越来越便宜,反过来又加速了进一步推动这一过程的额外软件和硬件开发。随着新架构的出现,更复杂的算法会在其上运行,而这些算法的要求也越来越高,这个过程还在继续。我们还必须记住一个事实,不仅硬件必须与时俱进,软件也必须改进以利用硬件的力量。根据E. Dijkstra 的说法,在他1972 年的图灵 奖演讲中,“说白了:只要没有机器,编程就没有问题;当我们有几台弱计算机时,编程变成了一个小问题,而现在我们有了巨大的计算机,编程也变成了一个同样巨大的问题。” 我们将在这些问题上稍作详细说明。

 

第一次软件危机:在 60 年代和 70 年代主要使用汇编语言编程的时间范围内面临第一个挑战。计算机必须处理更大、更复杂的程序,我们需要在不损失性能的情况下获得抽象和 可移植性。这导致了高级编程语言的引入。

 

第二次软件危机:时间框架是在 80 年代和 90 年代,当时无法构建和维护需要由数百名程序员开发的数百万行代码的复杂而健壮的应用程序。需要获得可组合性、延展性和可维护性。随着面向对象编程、更好的工具和更好的软件工程方法的引入,这些问题得到了解决。

 

今天,引入了如此多的抽象,硬件和软件之间有一个明确的界限,程序员不必了解处理器的任何信息。程序在所有处理器上运行时都忽略了处理器。一个在 70 年代用 C 编写的程序仍然有效,而且在今天要快得多。这种抽象为程序员提供了很大的自由。然而,在过去十年左右的时间里,我们还面临着关于多核处理器编程的第三次危机。这在图 40.1 中进行了说明。

 

第三次危机的起源

 


 

第三次危机的起源:自从多核架构出现以来,我们需要开发能够利用架构进步并保持可移植性、延展性和可维护性的软件,而不会过度增加程序员面临的复杂性。跟上软件当前的发展速度至关重要。但是,由于以下因素,并行编程很困难:

 

• 程序员的复杂性和工作量大幅增加

 

– 程序员必须考虑性能

 

– 必须在每个级别设计并行性

 

• 人类是连续的存在

 

– 对我们中的许多人来说,将问题解构为并行任务很困难

 

• 并行性不容易实现

 

– 并行性不能被抽象或分层

 

– 必须以非常不同(非直观)的方式重构代码和数据

 

• 并行程序很难调试

 

– 可能的执行顺序组合爆炸

 

– 竞争条件和死锁错误是不确定的和虚幻的

 

– 非确定性错误在实验室环境和仪器中消失

 

解决第三次软件危机的思路:计算机体系结构专家也指出了以下解决当前软件危机的方向。

 

计算机体系结构的进步:随着计算机体系结构领域的进步,我们需要了解以下事实。正如大卫帕特森所指出的,计算机体系结构中的传统智慧发生了变化。

 

• 摩尔定律和电源墙

 

– 与过去相反,现在电源很贵,但晶体管可以认为是免费的

 

– 需要降低动态功耗和静态功耗

 

• 单片单处理器在内部是可靠的,错误仅发生在引脚上

 

– 随着特征尺寸的下降,软硬错误率增加,引起关注

 

– 线延迟、噪声、交叉耦合、可靠性、时钟抖动、设计验证、

 

... 延长 ≤65 nm 的大型设计的开发时间和成本

 

• 研究人员通常通过构建芯片来展示新架构

 

– 65 nm 或更低掩模的成本、ECAD 的成本以及 GHz 时钟设计时间的延长导致研究人员不再构建可信的芯片

 

• 乘法通常很慢,但加载和存储很快

 

– 与之前的状态相反,加载和存储很慢,但乘法很快,因为先进的硬件 – 我们有一个记忆墙

 

• 我们可以通过编译器和架构创新揭示更多 ILP

 

– 寻找更多 ILP 的回报递减 – ILP Wall

 

• 摩尔定律可能表明 CPU 性能每 18 个月提高 2 倍

– 电源墙 + 内存墙 + ILP 墙 = 砖墙

 

以上种种因素,都导致了编程模式的被迫转变。

 

新颖的编程模型和语言:新颖的编程模型和语言对于解决第三次软件危机至关重要。新语言也是过去两次危机的核心解决方案。随着架构的范式转变、数据科学和物联网等新应用领域、新硬件功能和新客户的涌入,我们应该能够使用新的编程模型和语言实现并行性,而不会增加程序员的负担。

 

并行编程工具:随着新的编程模型和语言的出现,我们还需要构建适当的工具来提高程序员的生产力。我们需要构建积极的编译器和工具,以识别并行性、调试并行代码、更新和维护并行代码并将多个域拼接在一起。

 

因此,虽然现在所有消费类 CPU 都是多核的,但软件仍然主要设计为顺序的。遗留代码的并行化非常昂贵,并且需要具有计算机体系结构和应用程序领域技能的开发人员。我们需要以创新的编程模型为后盾的新一代软件编写工具。新工具应该是原生并行的,并允许在运行时跨性能、可靠性、吞吐量、延迟和能耗的多个维度优化代码,同时向开发人员提供适当的抽象级别。为了使新一代工具的开发在经济上可行,可能需要创新的商业模式。

 

未来趋势:基于上述讨论,未来我们可以预期硬件将成为一种商品,其价值将体现在驱动它的软件及其生成的数据中。数据洪流将需要一个可以传输和存储数据的基础设施,以及可以实时分析和从数据中提取价值的计算系统。根据为计算机系统提供的路线图,有人认为计算部门将在连接以提供系统服务的小型专用计算单元和分析大量数据所需的更大更强大的单元之间变得越来越两极化。实时数据。

 

自动化、航空航天、汽车和制造领域的应用需要几年前超级计算机的典型计算能力,但在尺寸、功耗和保证响应时间方面存在限制,这是嵌入式应用的典型特征。因此,我们需要开发一系列创新和可扩展的技术,为从嵌入式微服务器到大型数据中心的计算设备提供支持。

 

融合自动化、大数据实时处理、自主行为和极低功耗的计算应用正在改变我们生活的物理世界,并创造新的应用领域,例如智能城市、智能家居等。 数据本地化正在成为一个问题,推动了多级应用程序的开发,这些应用程序在本地/移动设备和基于云的服务器之间共享处理和数据。万物互联的概念正在快速发展。

 

路线图指出了几种解决社会和经济关键方面的情景。图 40.2 给出了场景概览。描述计算将如何在每个场景中发展将使我们能够描述一系列技术需求,这些需求可能转化为计算机行业的研究和创新挑战。所有场景的一个共同主题是需要在应用程序边界内完全互连、自我感知、上下文感知和自我优化的小型低成本和低功耗计算系统。


 

总而言之,我们总结了计算机体系结构课程中讨论的概念。我们已经指出了需要牢记的基本思想和我们今天面临的主要挑战。