前言

本书的目的

本书到现在已经是第5个版本了,我们的目标一直没有改变,就是要阐述那些为未来技术发展奠定基础的基本原理。计算机体系结构的各种发展机遇总是让我们激情澎湃,不曾有丝毫消退。我们在第1版中就作出过如下的论述:“这个学科不是令人昏昏欲睡、百无一用的纸版模型。绝对不是!这是一个受到人们热切关注的学科,需要在市场竞争力与成本性能能耗之间作好权衡,从事这个学科既可能导致可怕的失败,也可能带来显赫的成功。”

在编写第1版时,我们的主要目的是希望改变人们原来学习和研究计算机体系结构的方式。现今,我们感到这一目标依然正确,依然重要。该领域日新月异,在对其进行研究时,必须采用真实计算机上的测量数据和真实示例,而不是去研究一大堆从来都不需要实现的定义和设计。我们不仅热烈欢迎过去与我们结伴而行的老读者,同样也非常欢迎现在刚刚加入我们的新朋友。不管怎样,我们都保证将采用同样的量化方法对真实系统进行分析。

和前几版一样,在编写这个新版本时,我们力争使其既适用于学习高级计算机体系结构与设计课程的学生,也适用于专业的工程师和架构师。与第1版类似,这个版本重点介绍新平台(个人移动设备和仓库级计算机)和新体系结构(多核和GPU)。这一版还秉承了前几版的做法,希望能够通过强调成本、性能、能耗之间的平衡和优秀的工程设计,揭去计算机体系结构的神秘面纱。我们相信这一领域正在日趋成熟,发展成为一门具备严格量化基础的经典理工学科。

关于第5版

我们曾经说过,第4版可能因为转向讨论多核芯片而成为自第1版以来的最重要版本。但我们收到了这样的反馈意见:第4版已经失去了第1版重点突出的优点,它一视同仁地讨论所有内容,不分重点和场合。我们非常确信,第5版不会再有这样的评价了。

我们相信,最令人激动的地方在于计算规模的两个极端:以移动电话和平板电脑之类的个人移动设备(PMD)为客户端,以提供云计算的仓库级计算机为服务器。(具有敏锐观察力的读者可能已经看出本书封面上云计算的寓意。)尽管这两个极端的规模大小不同,但它们在成本、性能和能效方面的共同主题给我们留下了深刻印象。因此,每一章的讨论背景都是PMD和仓库级计算机的计算,第6章是全新的一章,专门讨论仓库级计算机。

本书的另一条主线是讨论并行的所有不同形式。我们首先在第1章指出了两种应用级别的并行,一个是数据级并行(DLP),它的出现是因为有许多数据项允许同时对其进行操作;另一个是任务级并行(TLP),它的出现是因为创建了一些可以独立执行并在很大程度上并行的工作任务。随后解释4种开发DLP和TLP的体系结构样式,分别是:第3章介绍的指令级并行(ILP),第4章介绍的向量体系结构和图形处理器(GPU),这一章是第5版新增加的内容;第5章介绍的线程级并行;第6章通过仓库级计算机介绍的需求级并行(RLP),这一章也是第5版中新增加的。本书中,我们将存储器层次结构的内容提前到第2章,并将存储系统那一章改作附录D。我们对第4章、第6章的内容尤为感到自豪,第4章对GPU的解读是目前最详尽、最清晰的,第6章首次公布了Google仓库级计算机的最新细节。

与前几版相同,本书前三个附录提供了有关MIPS指令集系统、存储器层次结构和流水线的基础知识,如果读者没有读过《计算机组成与设计》之类的书籍,可用作参考。为了在降低成本的同时还能提供一些读者感兴趣的补充材料,我们在网络上提供了另外9个附录,网址为:http://booksite.mkp.com/9780123838728。这些附录的页数之和比本书还要多呢!

这一版继续发扬“以真实示例演示概念”的传统,并增加了全新的“融会贯通”部分。这一版中的“融会贯通”内容包括以下各服务器的流水线组成与存储器层次结构:ARM Cortex A8处理器、Intel core i7处理器、NVIDIA GTX-280和GTX-480 GPU,还有Google仓库级计算机。

主题的选择与组织

和以前一样,我们在选择主题时采用了一种保守的方法,毕竟这个领域中值得讨论的思想实在太多了,不可能在这样一本主要讨论基本原理的书中将其全部涵盖在内。我们没有面面倶到地分析读者可能遇到的所有体系结构,而是将重点放在那些在任何新计算机中都可能涉及的核心概念上。根据一贯坚持的选材标准,本书讨论的思想都经过深入研究并已被成功应用,其内容足以采用量化方法进行讨论。

我们一直重点关注的内容都是无法从其他来源获取的同类资料,因此我们将继续尽可能讨论比较高级的内容。事实上,本书介绍的有些系统,就无法在文献中找到相关描述。如果读者需要了解更为基础的计算机体系结构知识,可以阅读《计算机组成与设计:硬件/软件接口》(Computer Organization and Design: The Hardware/Software Interface)一书。

内容概述

这一版对第1章进行了补充,其中包括能耗、静态功率、动态功率、集成电路成本、可靠性和可用性的计算公式。(封二上也列出了这些公式。)在本书后续部分读者能够一直应用这些公式。除了计算机设计与性能测量方面的经典量化原理之外,还对PIAT一节进行了升级,采用了新的SPECPower基准测试。

我们认为,与1990年相比,指令集体系结构扮演的角色有所弱化,所以我们把这一部分内容作为了附录A。它仍然采用MIPS64体系结构。(为便于快速查看,封三汇总了MIPS ISA相关信息。)网站上的附录K介绍了10种RISC体系结构、80x86、DEC VAX和IBM 360/370,献给ISA爱好者们。

随后,我们在第2章开始讨论存储器层次结构,这是因为很容易针对这些内容应用成本性能功耗原理,而且存储器是其余各章的关键内容。和上一版一样,附录B对缓存机制作了概述,以供读者需要时查阅。第2章讨论了对缓存的10种高级优化方法。这一章还介绍了虚拟机,它便于提供保护、进行软硬件管理,而且在云计算中也扮演着重要角色。除了介绍SRAM和DRAM技术之外,这一章还包括了闪存的内容。PIAT示例选择了PMD中使用的ARM Cortex A8和服务器中使用的Intel Core i7。

第3章主要研究高性能处理器中的指令级并行开发,包括超标量执行、分支预测、推理、动态调度和多线程。前面曾经提到,附录C是关于流水线的一个综述,以备随时查阅之用。第3章还研究了ILP的局限性。和第2章一样,PIAT示例还是ARM Cortex A8和Intel Core i7。第3版包括大量有关Itanium和VLIW的材料,现在这些内容放在网上的附录H中,这表明了我们的观点:这种体系结构未能达到过去所宣称的效果。

多媒体应用程序(比如游戏和视频处理)的重要性在提高,因此,开发数据级并行的体系结构也变得更为重要。具体来说,越来越多的人在关注利用图形处理器(GPU)执行的运算,但很少有架构师了解GPU到底是如何工作的。我们决定编写新的一章,主要就是为了揭开这种新型计算机体系结构的奥秘。第4章开始介绍向量体系结构,对多媒体SIMD指令集扩展和GPU的解释就是以此为基础的。(网站上的附录G深入地讨论了向量体系结构。)GPU一节是本书最难写的部分,需要多次反复才能给出一个既精确又容易理解的描述。一个重大挑战就是术语。我们决定使用我们自己的术语,然后给出这些术语与NVIDIA官方术语之间的对应关系。这一章介绍了Roofline性能模型,然后用它来对比Intel Core i7、NVIDIA GTX 280和GTX 480 GPU。这一章还介绍了供PMD使用的Tegra 2 GPU。

第5章介绍多核处理器,探讨了对称、分布式存储器体系结构,考查了组织原理和性能。接下来是有关同步和存储器一致性模型的主题,所采用的示例是Intel Core i7。对片上互连网络感兴趣的读者可以阅读网站上的附录F,对更大规模多处理器和科学应用感兴趣的读者可以阅读网站上的附录I。

前面曾经提到,第6章介绍了计算机体系结构中的最新主题——仓库级计算机(Warehouse- Scale Computer,WCS)。依靠Amazon Web服务部门和Google工程师的帮助,本章整合了有关WSC设计、成本与性能的详细资料,而以前了解这些内容的架构师寥寥无几。在开始描述WSC的体系结构和物理实现(及成本)之前,首先介绍了MapReduce编程模型。从成本的角度可以解释为什么会有云计算,以及为何在云中使用WSC进行计算的成本要低于在本地数据中心的计算成本。PIAT实例是对Google WSC的描述,有些内容是首次公开的。

接下来就是附录A到附录L。1附录A介绍ISA的原理,包括MIPS64,附录K介绍Alpha、MIPS、PowerPC和SPARC的64位版本及其多媒体扩展。其中还包括一些经典体系结构(80x86、VAX和IBM 360/370)和流行的嵌入指令集(ARM、Thumb、SuperH、MIPS16和Mitsubishi M32R)。附录H与其相关,介绍了VLIW ISA的体系结构和编译器。

1本书中文版未收录附录D到附录L,这些内容可在英文书网站http://booksite.mkp.com/9780123838728获取。——编者注

前面曾经提到,附录B和附录C是缓存与流水线基本概念的教程。建议对缓存不够熟悉的读者在阅读第2章之前先阅读附录B,新接触流水线的读者在阅读第3章之前先阅读附录C。

附录D“存储系统”包括:进一步讨论可靠性和可用性,以RAID 6方案介绍为主体的RAID教程,非常珍贵的真实系统故障统计信息。接下来介绍了排队理论和I/O性能基准测试。我们评估了一个真实集群Internet Archive的成本、性能和可靠性。“融会贯通”部分以NetApp FAS6000文件管理程序为例。

附录E由Thomas M. Conte撰写,汇总了嵌入式系统的相关内容。

附录F讨论网络互连,由Timothy M. Pinkston和José Duato进行了修订。附录G最初由Krste Asanović撰写,其中详细介绍了向量处理器。就我们所知,这两个附录是其各自相关主题的最好材料。

附录H详细介绍了VLIW和EPIC,也就是Itanium采用的体系结构。

附录I详细介绍了大规模共享存储器多处理方面用到的并行处理应用和一致性协议。附录J由David Goldberg撰写,详细介绍了计算机算法。

附录L将第3版每一章中的“历史回顾与参考文献”部分集中在一起。对于各章介绍的思想,它尽量给予一个恰当的评价,并让读者了解这些创造性思想背后的历史。我们希望以此来展现人类在计算机设计方面的戏剧性发展过程。这个附录还提供了一些参考文献,主修体系结构的学生可能会非常喜欢它们。其中提到了本领域的一些经典论文,如果时间允许,建议读者阅读这些论文。直接听原创者讲述他们的思想,在深受教育的同时,也是一种享受。而“历史回顾”是以前版本中最受欢迎的章节之一。

内容导读

所有读者都应当从第1章开始阅读,除此之外并不存在什么唯一的最佳顺序。如果你不想阅读全部内容,可以参考下面这些顺序。

  • 存储器层次结构:附录B、第2章、附录D。
  • 指令级并行:附录C、第3章、附录H。
  • 数据级并行:第4章、第6章、附录G。
  • 线程级并行:第5章、附录F、附录I。
  • 请求级并行:第6章。
  • ISA:附录A、附录K。

附录E可以随时阅读,但在ISA和缓存序列之后阅读,效果可能会更好一些。附录J可以在涉及运算时阅读。附录L的各部分内容应当在读完正文中相应章节后阅读。

章节安排

我们根据一种统一的框架安排内容,使各章在结构方面保持一致。首先会介绍一章的主题思想,然后是“交叉问题”部分,说明本章介绍的思想与其他各章有什么相互关系。接下来是“融会贯通”部分,通过展示如何在实际计算机中应用这些思想,将它们串在一起。

再下面是“谬论与易犯错误”,让读者从他人的错误中汲取教训。我们将举例说明一些常见误解与体系结构陷阱,要避免犯错是非常困难的,哪怕你明明知道它们就在前面等着你。“谬论与易犯错误”部分是本书最受欢迎的内容。每一章都以一个“结语”节结束。

案例研究与练习

每一章的最后都有案例研究和练习。这些案例研究由业内和学术界的专家编撰而成,通过难度逐渐增大的练习来探讨该章的关键概念,检验读者的理解程度。教师们会发现这些案例研究都非常详尽和完善,完全可以针对它们设计出一些练习。

每个练习中用尖括号括起的内容(<章.节>)指明了做这道题应该阅读哪部分正文内容。我们这样做的目的,一方面是为了提供复习内容,另一方面是希望帮助读者避免在还没有阅读相应正文的情况下去做一些练习。为了使读者大致了解完成一道题需要多长时间,我们为这些练习划定了不同等级:

[10] 短于5分钟(阅读和理解时间);
[15] 5~15分钟给出完整答案;
[20] 15~20分钟给出完整答案;
[25] 在1小时内给出完整的书面答案;
[30] 小型编程项目:时间短于1整天;
[40] 大型编程项目:耗时2周;
[讨论] 与他人一起讨论的主题。

在textbooks.elsevier.com注册的老师可以得到案例研究与习题的解答。

补充材料

我们还通过网络提供了多种资料,网址为http://booksite.mkp.com/9780123838728/,内容包括:

  • 参考附录——涵盖了一系列高级主题,由相关领域的专家撰写;
  • 历史材料,考察了正文各章所介绍的关键思想的发展形成过程;
  • 供老师使用的PowerPoint幻灯片;
  • PDF、EPS和PPT格式的书中插图;
  • 网上相关材料的链接;
  • 勘误表。

我们会定期补充新材料和网上其他可用资源的链接。

帮助改进本书

如果你阅读后面的“致谢”部分,将会看到我们已经下了很大的功夫来纠正错误。由于一本书会进行多次印刷,所以我们有机会进行更多的校订。如果你发现了任何遗留错误,请通过电子邮件联系出版商(ca5bugs@mkp.com)。2

2读者可以到图灵社区本书主面(www.ituring.com.cn/book/888)提交中译本勘误。——编者注

我们欢迎你对本书给出其他意见,请将它们发送到另一个电子信箱:ca5comments@mkp.com。

结语

本书仍然是一本真正的合著作品,我们每人编写的章节和附录各占一半。如果没有对方完成另一半工作,如果没有对方在任务似乎无望完成时给予鼓励,如果没有对方点透某个难以表述的复杂概念,如果没有对方花费周末时间来审阅书稿,又如果没有对方在自己因为其他繁重职责而难以提笔时给予宽慰(从简历可以看出,这些职责是随着本书的版本号以指数形式增加的),我们无法想象这本书要花费多长时间才能完成。当然,对于你将要读到的内容,其中若有不当之处,我们也负有同等责任。

John Hennessy

David Patterson

目录

  • 作者简介
  • 序言
  • 前言
  • 第1章  量化设计与分析基础
  • 第2章  存储器层次结构设计
  • 第3章  指令级并行及其开发 
  • 第4章  向量、SIMD和GPU体系结构中的数据级并行
  • 第5章  线程级并行 
  • 第6章  以仓库级计算机开发请求级、数据级并行
  • 附录A  指令集基本原理 
  • 附录B  存储器层次结构回顾
  • 附录C  流水线:基础与中级概念 
  • 参考文献 
  • 索引