计算机组成与设计:硬件/软件接口(原书第5版·ARM版)
作者 : [美]戴维·A. 帕特森(David A. Patterson) 约翰·L. 亨尼斯(John L. Hennessy) 著
译者 : 陈微 译
丛书名 : 计算机科学丛书
出版日期 : 2018-09-21
ISBN : 978-7-111-60894-3
定价 : 139.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 521
开本 : 16
原书名 : Computer Organization and Design: The Hardware/Software Interface, ARM Edition
原出版社: Elsevier (Singapore) Pte Ltd
属性分类: 教材
包含CD : 无CD
绝版 :
图书简介

本书采用ARMv8-A体系结构, 介绍当前硬件技术的基本原理、汇编语言、计算机算术、流水线、内存层次结构和I/O。本书更加关注后PC时代发生的变革,通过实例、练习等详细介绍最新涌现的移动计算和云计算,更新的内容还包括平板电脑、云基础设施以及ARM(移动计算设备)和x86 (云计算)体系结构。

图书特色

图书前言

神秘是我们所能体验的最美好的事物,它是所有真正的艺术和科学的源泉。
—阿尔伯特·爱因斯坦,《我的信仰》,1930年
关于本书
我们学习计算机科学与工程时,不仅需要了解这个领域内的最新进展,同时也需要掌握计算技术背后的基本原理和组成结构。计算机系统的组成决定了系统的功能和性能,是系统成功与否的关键。因此,计算领域各个方向的读者都能从计算机系统组成理论的学习中
受益。
随着现代计算机技术的发展,计算领域的各个方向都需要对硬件和软件均有深入理解的专业人士。硬件和软件在各个层次上的相互关系,为理解计算技术的基本原理提供了框架。无论你感兴趣的是硬件还是软件,是计算机科学还是电气工程,计算机组成与设计的核心思想都是相同的。因此,本书着重展示计算机硬件与软件间的相互关系,并重点介绍当今计算机中的基础概念。
当前,微处理器由单核发展为多核,这一趋势印证了本书自第1版就提出的观点。过去,程序员可以忽略我们的建议,在计算机体系结构专家、编译器开发者以及芯片工程师的帮助下,他们一行代码也不用修改,就能让程序更快或更高效地运行在新型微处理器上。但是,这样的时代已经一去不返了。为了使程序运行得更快,就必须要实现并行化。虽然许多研究者的目标是希望程序员在编写程序时无须考虑底层硬件的并行特性,但这一目标还要很多年才能实现。我们认为,至少在下一个十年里,大多数程序员仍必须理解硬件/软件接口,才能编写出在并行计算机上高效运行的程序。
本书适合以下读者:在汇编语言或(数字)逻辑设计方面只有少许经验,需要对计算机组成的基本原理有所理解;具有汇编语言或逻辑设计基础,需要学习如何设计计算机,或者需要进一步理解计算机系统是如何工作的。
与本书相关的另一本书
有些读者可能对《计算机体系结构:量化研究方法》一书有所了解,也就是人们常说的“Hennessy and Patterson”(本书则常被称为“Patterson and Hennessy”)。我们撰写“量化研究方法”那本书,意在通过坚实的工程基础和量化的开销/性能权衡方法来描述计算机体系结构的原理。书中以商用系统为基础,将案例和测量方法相结合,以期帮助读者积累实际的设计经验。我们希望阐明的是,计算机体系结构可以通过“量化”的方法而不是“描述”的方法来学习。因此,它主要面向需要对计算机体系结构有详细了解的计算机专业人士。
本书的大多数读者可能并不打算成为计算机体系结构专家。然而,软件设计人员对底层硬件技术的理解程度,将对软件系统的性能和能效产生显著影响。因此,编译器开发者、操作系统设计者、数据库程序员以及其他大多数软件工程师都应当对本书所介绍的原理有充分了解。同样,硬件设计人员也必须清楚地理解他们的工作将对软件应用产生何种影响。
因此,本书绝非“量化研究方法”一书的子集,而是进行了大量扩充和修订,以满足不同层次的读者。我们在“量化研究方法”的后续版本中删除了很多介绍性的内容,较之这两本书的第1版,现在重叠的内容已经大幅减少,这是一个令人高兴的变化。
这一版为何采用ARMv8
指令集的选择对于一本计算机体系结构教科书而言是非常关键的。无论一种指令集多受欢迎,如果它对初学者来说花哨难懂,我们仍会放弃这种巴洛克式的华美。初次接触的指令集应当是指令集中的“典范”,足以被牢记心间,就像牢记初恋一样。你或许不会相信,初恋和初次接触的指令集都有令人记忆犹新的魔力。
虽然当年也有很多种指令集可供选择,但在撰写“量化研究方法”的第1版时,我们自己构造了一种RISC风格的指令集—MIPS。MIPS指令集非常简洁而且广受欢迎,因此从第1版开始,那本书的后续版本以及我们的其他相关书籍都采用MIPS指令集作为范例。MIPS一直陪伴着我们以及我们的广大读者。
当前,ARM发展速度惊人,其指令集的受欢迎程度也令人难以置信。2015年ARM芯片的出货量就达到了140亿片。很多教师提出需求,希望能够基于ARM出版一个版本。在本书亚洲版的一些章节中,我们曾做过尝试。但是,ARMv7(32位地址)指令集“怪异”的风格让我们无法忍受。因此,我们考虑不再继续采用ARMv7。
然而,让人惊喜的是,ARM推出的64位指令集有了很大的改动。较之ARMv7,新的64位指令集和MIPS有很多相似之处:
将寄存器数由16个增加为32个。
将PC设计为独立的寄存器,而不是寄存器组中的一个。
去除了指令的条件执行功能。
去除了多字连续load和store(load multiple和store multiple)指令。
增加了PC相对寻址的分支指令,支持较大的转移空间。
将所有数据传输指令的寻址模式设置为一致的。
减少了指令集的条件码。
……
虽然ARMv8比MIPS庞大得多(ARMv8指令集参考手册多达5400页),但是本书只挑选了ARMv8指令集的一个子集,这个子集在指令数量和特性上都与以前版本所采用的MIPS相似。为了避免混淆,本书将这个子集称为LEGv8。所以,本书基于LEGv8撰写了ARMv8版。
ARMv8指令集本身提供了32位地址指令和64位地址指令两种模式。我们原本可以选择ARMv8指令集并保持32位地址模式,不过我们的出版商对读者进行了调查,结论是75%的读者倾向于采用64位地址模式或者持中立态度。因此我们最终决定将地址空间扩展为64位,从目前技术发展的角度来看也更为合理。
ARM版和MIPS版的区别仅在于涉及指令集的章节,主要是第2、3、5章的虚拟存储器部分,以及第6章的VMIPS例子部分。第4章切换到了ARMv8指令,修改了若干图表,增加了一些“精解”模块,这些改动都较为简单。第1章和剩下的附录几乎没有改动。考虑到网络上大量的文档材料以及ARMv8本身的复杂度,将原来的附录A(汇编器、链接器和SPIM模拟器)从MIPS版替换为ARM版是非常困难的。对此,本书在第2、3、5章中均包含了对除ARMv8核心指令之外的其他ARMv8指令的快速概述,而这些核心指令则在其他章节中详细介绍。我们相信本书的读者即使没有阅读网络上动辄几千页的资料的经验,也依旧能够较好地理解ARMv8。其他勇于探索的读者则可以通过阅读这些概述对ARMv8形成框架性的认识,以便后续更好地理解ARMv8众多复杂的特点。
当然,我们并没有打算永久地采用ARMv8结构,例如本书第5版的ARM版和MIPS版就同时在售。本书未来的版本可能还会有对MIPS版和ARM版的需求,也可能会有包含另一种指令集的新版本出现。我们期待你的反馈。
第5版的变化
第5版有6项主要变化:
通过实例论证理解硬件的重要性。
对于第1章中提到的8个伟大思想,在后面每次应用这些思想时予以突出显示。
更新例题,体现从PC时代到后PC时代的发展变化。
将I/O吞吐率方面的内容贯穿在整本书中,而不是集中在一章中阐述。
对技术内容进行了更新,体现自2009年本书第4版出版以来工业界的变化。
将附录和可选章节的内容放在互联网上(带有??图标),而不是随书附加CD,从而降低了成本,也使新版本可独立成为一部电子书。
在详细介绍第5版的变化即修订目标之前,首先看下表。该表列出了本书的主要内容,并为关注硬件和关注软件的两类读者分别进行了导读。其中,第1、4、5、6章是两类读者都需关注的。第1章讨论了能耗的重要性及其如何引发微处理器从单核向多核转变,还介绍了计算机体系结构中的8个伟大思想。第2章对于硬件方向的读者来说很可能是复习性的内容,而对于软件方向的读者来说则是必选的学习内容,特别是希望对编译器和面向对象编程语言有更多了解的读者。第3章适合对数据通路构建或浮点运算感兴趣的读者。如果你对这些内容没有兴趣,或是已经掌握了这部分知识,则可以跳过该章。不过,第3章中给出了一个矩阵乘法的实例,展示如何通过子字并行方法将性能提高4倍,因此不要跳过3.6~3.8节。第4章介绍流水线处理器。其中,4.1、4.5和4.10节为概述,4.12节给出了进一步提高矩阵乘法性能的方法,这些小节对于关注软件的读者来说比较重要。而对于关注硬件的读者,第4章是核心内容,你可以根据自己具备的硬件知识背景,选择是否先阅读附录A中的逻辑设计部分。最后一章是全新的内容,涉及多核、多处理器和集群系统,所有读者都应该阅读。我们重新组织了内容,希望能使很多技术思想的阐述更加自然,并且引入了更多关于GPU、仓储式计算机以及网络软硬件接口(集群系统中的关键)的内容。
章/附录 节 关注软件 关注硬件
第1章
计算机的抽象与技术 1.1~1.11
1.12(历史)
第2章
指令:计算机的语言 2.1~2.14
2.15(编译器和Java)
2.16~2.21
2.22(历史)
附录D
RISC指令集体系结构 D.1~D.17
第3章
计算机的算术运算 3.1~3.5
3.6~3.9(子字并行)
3.10~3.11(谬误)
3.12(历史)
附录A
逻辑设计基础 A.1~A.13
第4章
处理器 4.1(引言)
4.2(逻辑设计的一般方法)
4.3~4.4(简单实现)
4.5(流水线概述)
4.6(流水线数据通路)
4.7~4.9(冒险和异常)
4.10~4.12(并行和实例)
4.13(Verilog流水线控制)
4.14~4.15(谬误)
4.16(历史)
附录C
控制器的硬件实现 C.1~C.6
第5章
大容量和高速度:开发存储器层次结构 5.1~5.10
5.11(廉价冗余磁盘阵列)
5.12(Verilog cache控制器)
5.13~5.16
5.17(历史)
第6章
并行处理器:从客户端到云 6.1~6.8
6.9(网络)
6.10~6.14
6.15(历史)
附录B
图形处理单元 B.1~B.13

仔细阅读   有时间阅读  作为参考 
回顾或阅读  拓展阅读  
第5版的第一个目标是希望通过具体的例子,帮助读者理解硬件对提高性能和能效的重要性。正如前面所述,第3章介绍了如何采用子字并行将矩阵乘法加速4倍。第4章介绍了通过循环展开将性能翻倍,从而证明了指令集并行的价值。第5章阐述了如何利用分块技术优化cache,将性能再次翻倍。第6章证明了通过在16个处理器上采用线程级并行可以获得14倍的加速比。而这四种优化技术的实现,仅需要在原始矩阵乘法例子的C代码上增加24行代码。
第二个目标是帮助读者更好地理解计算机体系结构技术的精髓:首先集中介绍计算机体系结构设计中的8个伟大思想,然后在整本书中明确指出这些思想的应用。在每次引用这些伟大思想时会突出显示,全书大约有100次引用,每章中至少有7处应用实例,并且每个思想至少被引用5次。通过并行、流水线以及预测技术提高性能是被引用最多的三个思想,其次是摩尔定律。讲述处理器的第4章是实例最多的一章,也是最吸引计算机架构师的一章。通过并行提高性能是在每一章中都能找到的伟大思想,这也是近年来计算机领域以及本书所一直强调的。
第三个目标是通过例题和相关讲解,来展现计算技术从PC时代进入后PC时代的变化。因此,第1章中直接介绍了平板电脑而非传统的PC,第6章则描述了云计算基础设施。此外,本版还引入了后PC时代个人移动设备里广泛使用的ARM指令集,以及在PC时代和云计算中占主导地位的x86指令集。
第四个目标是将I/O吞吐率方面的内容贯穿在整本书中,而不是集中在一章中介绍。这与第4版中将并行技术贯穿全书各章的做法一样。因此,大家可在1.4、4.9、5.2、5.5、5.11和6.9节中找到I/O相关的内容。我们的初衷是希望通过分散这些内容,使得I/O对于读者(和教师)而言更容易掌握。
计算机是一个快速发展的领域,本书推出新版就是希望能通过更新技术内容而跟上发展浪潮,这也是我们的第五个目标。所以,本版采用能够反映后PC时代特点的ARM Cortex- A53和Intel Core i7作为实例。此外,我们还增加了关于GPU特有术语的教程,并对构成云的仓储式计算机以及10G以太网卡进行了较为深入的阐述。
最后一个目标是,为了保持本书主体部分的精简,以及考虑到纸质书与电子书的兼容性,我们一改以前版本的做法,将可选内容由随书CD改为网络资源。
此外,我们更新了本书的所有练习题。
在修订内容的同时,本版仍然保留了以往版本中有用的要素。例如,为使本书作为参考书使用时更为便捷,我们仍在新术语第一次出现时给出定义,放在页边供读者参考。书中的“理解程序性能”模块有助于读者理解程序的性能,以及如何提高性能;而“硬件/软件接口”模块会帮助读者理解有关接口的权衡问题。与之前的版本一样,本版依旧包含“重点”模块,防止读者“只见树木不见森林”。“小测验”模块以及每章最后的“小测验答案”,可帮助读者在第一时间加强对内容的理解。本版同样提供了ARMv8参考数据卡,这是从IBM System/360的“绿卡”中得到的灵感。卡片上的数据已进行了更新,在编写ARMv8汇编语言程序时,可以作为很好的参考。
教学支持
我们收集了大量材料供用书教师在授课时使用,包括练习题答案、书中的图表、配套的幻灯片等,教师可以在出版商处注册后获得。本书的网页上同时给出了一个链接,读者可以从该链接上下载ARM DS-5专业软件套件,包括ARMv8-A(64位)体系结构模拟器,以及附录、术语表、参考文献和推荐读物等其他用于进一步学习的资料。如需更多信息,请访问出版商网址:booksite.elsevier.com/9780128017333。
结语
从下面的致谢中,你会发现我们花费了很长时间去修订本书各版中的错误。由于本书印刷了多次,因此我们有机会做更多的校正。如果你发现还有遗留的错误,请通过电子邮件与出版社联系(codARMbugs@mkp.com),或者通过邮局将信件邮寄给出版商。
本版是Hennessy和Patterson自1989年以来长期合作的第三次中止。由于要管理一所世界知名的大学,Hennessy校长将无法继续参加新版本的实际编写工作。留下Patterson一人感觉自己像是走在没有安全网保护的钢丝绳上。所以,在致谢中列出的人以及伯克利的同事们在本书的撰写过程中起了更大的作用。当然,以后读者阅读本书时抱怨的对象应该只有我一人。
致谢
在本书的每一版中,我们都非常幸运地得到了许多来自读者、审稿人以及其他撰稿人的帮助。每个人的帮助都使本书更加完美。
我们要向Khaled Benkrid和他在ARM公司的同事表示衷心的感谢。他们仔细阅读了本书中和ARM相关的内容,并提供了很多建设性的反馈意见。
第6章做了较大的修改,以至于我们对该章中的思想和内容进行了单独评审,并根据每位评审人的反馈意见做了修改。感谢斯坦福大学的Christos Kozyrakis,他建议在集群中使用网络接口来论证I/O的软硬件接口,并对该章其他内容的组织提出了建议。感谢斯坦福大学的Mario Flagsilk,他提供了NetFPGA NIC的细节、图表以及性能评测数据。感谢对第6章修改提出建议的下列人员:David Kaeli(Northeastern University),Partha Ranganathan(HP Labs),David Wood(University of Wisconsin)。还要感谢我在伯克利的同事Siamak Faridani、Shoaib Kamil、Yunsup Lee、Zhangxi Tan、Andrew Waterman。
特别感谢Rimas Avizenis(UC Berkeley),他开发了不同版本的矩阵乘法,并提供了相应的性能数据。我在UCLA读研究生时与他的父亲一起工作,和Rimas共事是一件美好的事情。
感谢我的长期合作伙伴Randy Katz(UC Berkeley)。我们共同讲授本科生课程时,一起提炼了计算机体系结构中的伟大思想。
感谢David Kirk、John Nickolls以及他们在NVIDIA的同事(Michael Garland、John Montrym、Doug Voorhies、Lars Nyland、Erik Lindholm、Paulius Micikevicius、Massimiliano Fatica、Stuart Oberman、Vasily Volkov),他们为本书提供了第一个深入介绍GPU的附录。再次感谢Jim Larus,他现在是EPFL计算机与通信科学学院的院长,为本书发挥了他在汇编语言方面的专长,欢迎本书读者使用他所开发和维护的模拟器。
非常感谢Zachary Kurmas(Grand Valley State University)在本书前几版的基础上,为本版更新和新增了很多练习题。同样感谢本书过去几版中练习题的编写人员:Perry Alexander(Te University of Kansas),Jason Bakos(University of South Carolina),Javier Bruguera(Universidade de Santiago de Compostela),Matthew Farrens(University of California, Davis),David Kaeli(Northeastern University),Nicole Kaiyan(University of Adelaide),John Oliver(Cal Poly, San Luis Obispo),Milos Prvulovic(Georgia Tech),Jichuan Chang(Google),Jacob Leverich(Stanford),Kevin Lim(Hewlett-Packard),Partha Ranganathan(Google)。
再次感谢Jason Bakos更新了本书的配套幻灯片。
感谢众多教师和读者的贡献,他们回答了出版商的问卷调查、审阅我们的提议、参加座谈,并对本版的出版计划进行分析和反馈。他们的名单如下。焦点小组:Bruce Barton(Suffolk County Community College),Jeff Braun(Montana Tech),Ed Gehringer(North Carolina State),Michael Goldweber(Xavier University),Ed Harcourt(St. Lawrence University),
Mark Hill(University of Wisconsin, Madison),Patrick Homer(University of Arizona),Norm Jouppi(HP Labs),Dave Kaeli(Northeastern University),Christos Kozyrakis(StanfordUniversity),Jae C. Oh(Syracuse University),Lu Peng(LSU),Milos Prvulovic(Georgia Tech),Partha Ranganathan(HP Labs),David Wood(University of Wisconsin),Craig Zilles(University of Illinois at Urbana-Champaign)。参加调查问卷和审阅的学者:Mahmoud Abou-Nasr(Wayne State University),Perry Alexander(Te University of Kansas),Behnam Arad(Sacramento State University),Hakan Aydin(George Mason University),Hussein Badr(State University of New York at Stony Brook),Mac Baker(Virginia Military Institute),Ron Barnes(George Mason University),Douglas Blough(Georgia Institute of Technology),Kevin Bolding(Seattle Pacifc University),Miodrag Bolic(University of Ottawa),John Bonomo(Westminster College),Jeff Braun(Montana Tech),Tom Briggs(Shippensburg University),Mike Bright(Grove City College),Scott Burgess(Humboldt State University),Fazli Can(Bilkent University),Warren R. Carithers(Rochester Institute of Technology),Bruce Carlton(Mesa Community College),Nicholas Carter(University of Illinois at Urbana-Champaign),Anthony Cocchi(Te City University of New York),Don Cooley(Utah State University),Gene Cooperman(Northeastern University),Robert D. Cupper(Allegheny College),Amy Csizmar Dalal(Carleton College),Daniel Dalle(Université de Sherbrooke),Edward W. Davis(North Carolina State University),Nathaniel J. Davis(Air Force Institute of Technology),Molisa Derk(Oklahoma City University),Andrea Di Blas(Stanford University),Derek Eager(University of Saskatchewan),Ata Elahi(Souther Connecticut State University),Ernest Ferguson(Northwest Missouri State University),Rhonda Kay Gaede(Te University of Alabama),Etienne M. Gagnon(L’Université du Québec à Montréal),Costa Gerousis(Christopher Newport University),Paul Gillard(Memorial University of Newfoundland),Michael Goldweber(Xavier University),Georgia Grant(College of San Mateo),Paul V. Gratz(Texas A&M University),Merrill Hall(Te Master’s College),Tyson Hall(Southern Adventist University),Ed Harcourt(St. Lawrence University),Justin E. Harlow(University of South Florida),Paul F. Hemler(Hampden Sydney College),Jayantha Herath(St. Cloud State University),Martin Herbordt(Boston University),Steve J. Hodges(Cabrillo College),Kenneth Hopkinson(Cornell University),Bill Hsu(San Francisco State University),Dalton Hunkins(St. Bonaventure University),Baback Izadi(State University of New York—NewPaltz),Reza Jafari, Robert W. Johnson(Colorado Technical University),Bharat Joshi(University of North Carolina, Charlotte),Nagarajan Kandasamy(Drexel University),Rajiv Kapadia, Ryan Kastner(University of California, Santa Barbara),E.J. Kim(Texas A&M University),Jihong Kim(Seoul National University),Jim Kirk(Union University),Geoffrey S. Knauth(Lycoming College),Manish M. Kochhal(Wayne State),Suzan Koknar-Tezel(Saint Joseph’s University),Angkul Kongmunvattana(Columbus State University),April Kontostathis(Ursinus College),Christos Kozyrakis(Stanford University),Danny Krizanc(Wesleyan University),Ashok Kumar, S. Kumar(Te University of Texas),Zachary Kurmas(Grand Valley State University),Adrian Lauf(University of Louisville),Robert N. Lea(University of Houston),Alvin Lebeck(Duke University),Baoxin Li(Arizona State University),Li Liao(University of Delaware),Gary Livingston(University of Massachusetts),Michael Lyle, Douglas W. Lynn(Oregon Institute of Technology),Yashwant K Malaiya(Colorado State University),Stephen Mann(University of Waterloo),Bill Mark(University of Texas at Austin),Ananda Mondal(Cla?in University),Alvin Moser(Seattle University),Walid Najjar(University of California, Riverside),Vijaykrishnan Narayanan(Penn State University),Danial J. Neebel(Loras College),Victor Nelson(Auburn University),John Nestor(Lafayette College),Jae C. Oh(Syracuse University),Joe Oldham(Centre College),Timour Paltashev, James Parkerson(University of Arkansas),Shaunak Pawagi(SUNY at Stony Brook),Steve Pearce, Ted Pedersen(University of Minnesota),Lu Peng(Louisiana State University),Gregory D. Peterson(Te University of Tennessee),William Pierce(Hood College),Milos Prvulovic(Georgia Tech),Partha Ranganathan(HP Labs),Dejan Raskovic(University of Alaska, Fairbanks) Brad Richards(University of Puget Sound),Roman Rozanov, Louis Rubinfeld(Villanova University),Md Abdus Salam(Southern University),Augustine Samba(Kent State University),Robert Schaefer(Daniel Webster College),Carolyn J. C. Schauble(Colorado State University),Keith Schubert(CSU San Bernardino),William L. Schultz, Kelly Shaw(University of Richmond),Shahram Shirani(McMaster University),Scott Sigman(Drury University),Shai Simonson(Stonehill College),Bruce Smith, David Smith, Jeff W. Smith(University of Georgia, Athens),Mark Smotherman(Clemson University),Philip Snyder(Johns Hopkins University),Alex Sprintson(Texas A&M),Timothy D. Stanley(Brigham Young University),Dean Stevens(Morningside College),Nozar Tabrizi(Kettering University),Yuval Tamir(UCLA),Alexander Taubin(Boston University),Will Tacker(Winthrop University),Mithuna Tottethodi(Purdue University),Manghui Tu(Southern Utah University),Dean Tullsen(UC San Diego),Steve VanderLeest(Calvin College),Christopher Vickery(Queens College of CUNY),Rama Viswanathan(Beloit College),Ken Vollmar(Missouri State University),Guoping Wang(Indiana-Purdue University),Patricia Wenner(Bucknell University),Kent Wilken(University of California, Davis),David Wolfe(Gustavus Adolphus College),David Wood(University of Wisconsin,Madison),Ki Hwan Yum(University of Texas, San Antonio),Mohamed Zahran(City College of New York),Amr Zaky(Santa Clara University),Gerald D. Zarnett(Ryerson University),Nian Zhang(South Dakota School of Mines & Technology),Jiling Zhong(Troy University),Huiyang Zhou(North Carolina State University),Weiyu Zhu(Illinois Wesleyan University)。
特别感谢Mark Smotherman反复查找本书中的技术错误和写作错误,他的工作大大提高了本版的质量。
感谢Morgan Kaufmann出版公司的支持,在Todd Green、Steve Merken和Nate McFadden
的有力领导下,我们顺利推出了ARM版,没有他们的工作,本书不可能得以问世。还要感谢Lisa Jones对本书出版过程的管理,感谢Mattew Limbert设计了封面。新封面巧妙地将本版所要呈现的后PC时代的内容和第1版封面所要表达的内容呼应起来。
以上提到的近150名人士为本版提供了大量帮助,使之成为我们期望的最棒的书。希望读者喜爱我们的新版本!

David A. Patterson

上架指导

计算机\计算机组成

封底文字

很高兴看到本书推出了ARM版,这本书曾启发了一代又一代的计算机科学家和工程师。ARM版不仅能够帮助世界各地的读者学习并掌握计算机组成与设计的理论知识,同时能够带领大家体验当今移动计算中使用最广泛的处理器体系结构。
——Khaled Benkrid, ARM Ltd.

教材的选择往往是一个令人沮丧的妥协过程——教学方法的适用度、知识点的覆盖范围、文辞的流畅性、内容的严谨度、成本的高低等都需要考虑。本书之所以是难得一见的好书,正是因为它能满足各个方面的要求,不再需要任何妥协。这不仅是一部关于计算机组成的教科书,也是所有计算机科学教科书的典范。
——Michael Goldweber,Xavier University

无论是对于80后、90后还是00后,这都是一本应该珍藏在书架上(或iPad中)的计算机体系结构教材。这本书既古老又新颖,不仅介绍了那些伟大的原理——摩尔定律、抽象、加速大概率事件、可靠性、存储器层次结构、并行和流水线,而且使用现代设计对这些伟大原理进行了说明。
——Mark D. Hill, University of Wisconsin-Madison

本书不仅仅会讲解计算机体系结构,而且为读者准备了迎接新的变化与挑战的“锦囊”。目前,半导体工艺技术按比例缩小的困难使得所有系统功率受限,而移动系统和大数据处理的性能需求却仍在不断增长。在计算技术这一新领域,必须进行软硬件协同设计,并且系统级体系结构优化与部件级优化一样重要。
——Christos Kozyrakis, Stanford University

Patterson和Hennessy讨论了不断变化的计算机硬件体系结构中的重要议题,强调硬件和软件模块在不同抽象层次上的交互。书中涵盖各种硬件和软件机制,I/O和并行的概念贯穿其中,全景式呈现了后PC时代的计算机体系结构。无论是平板电脑硬件工程师还是云计算软件架构师,如果你正对能源效率和并行化问题一筹莫展,那么本书必将成为不二之选。
——Jae C. Oh, Syracuse University

译者序

本书的翻译工作终于接近尾声,有机会翻译图灵奖得主Patterson和Hennessy的著作让我感到非常荣幸。本书对计算机组成和设计实践进行了系统深入的介绍和讨论,是计算机组成方面最为畅销的经典教材之一,适合作为计算机及相关专业的本科生教材,同时也适合需要对计算机组成的基本原理有所理解的读者,以及需要进一步理解计算机系统如何工作的读者阅读。
本书至今已经发行了5版,现在这一版为第5版的ARM版。在翻译本书之前,我们在计算机原理的教学工作中已经由使用MIPS调整为使用ARM体系结构进行教学,目的是使计算机原理的教学工作紧跟技术前沿。2016年5月,在合肥举行的全国计算机专业系统能力培养会议上,我们得知Patterson即将出版《计算机组成与设计》的ARM版,这与我们的工作不谋而合。ARM版出版之后,华章很快引进了该书。当我看到原版著作后,当即答应翻译此书。
ARM处理器是典型的RISC架构,具有性能高、成本低和能耗省的特点,在智能手机、平板电脑、嵌入控制、多媒体数字等处理器领域拥有主导地位。同时ARM也在向桌面机、服务器和超级计算机领域发展。在后PC时代,ARM具有巨大的生态系统和应用领域。因
此,了解这一体系结构对于我们理解计算机的组成原理与设计实践具有重要的意义。
当然,除了ARM版,本书还有传统的MIPS版和新推出的RISC-V版。无论哪个版本,都阐述了相似的基本原理和设计技术,而同样的根基又可以衍生出不同的结构。我想这也正是作者提供不同版本的目的所在,为读者提供更多的选择与比较的途径,同时也让读者体会到计算机组成与设计万变不离其宗的道理。
作者认为,计算领域各个方向的读者都能从本书的学习中受益。过去,程序员在计算机体系结构专家、编译器开发者以及芯片工程师的帮助下,一行代码也不用修改,就能让程序更快或更高效地运行在新型微处理器上。但是,这样的时代已经一去不返了。随着现代计算机技术的发展,计算领域的各个方向都需要对硬件和软件均有深入理解的专业人士。作者在本书各个章节的组织和阐述中,也贯穿了这种软硬件贯通的思想。
国内的学者也早已意识到软硬件贯通对计算机人才培养的重要性,系统能力培养正在国内高校的计算机专业中如火如荼地展开。计算机专业人才培养已从强调“程序”设计向强调“系统”设计转变。无论计算机发展是呈现当前网络化、服务化、普适化和智能化的特征,还是将来呈现其他的新趋势,“系统”都是各种酷炫应用背后的支撑,是计算机体系里最核心的存在。培养具有系统观、能够进行软硬件协同设计的软硬件贯通人才正是计算机专业人才培养的关键。千里之行始于足下,对计算机系统基本原理和组成结构的学习,正是理解硬件和软件在各个层次上的相互关系的基础。
如果读者阅读过本书的前三版,会发现自第4版起到第5版,本书的撰写风格有了不小的改变,很多较为“底层”和基础的内容不见了(比如运算器的细节等),而并行和优化等知识的篇幅增加了不少。撰写风格和内容发生改变的原因,一方面是技术发展所致,另一方面,我认为也是教学理念和方式的改变所致。我于2017年在美国德克萨斯大学奥斯汀分校进行了为期三个月的教学交流(教学内容是与计算机组成原理相关的),期间也为美国学生授课。我发现,教授在课堂上讲授的内容通常是较为高层甚至抽象的,而大量与授课内容相关的基础和细节,都需要学生在课后查阅资料自行学习,这对学生的学习能力要求更高。而我们则总是希望在课堂上把细节和关键都告诉学生。这种授课和人才培养理念的不同给我留下了深刻的印象,也值得国内的同行思考。
为了尊重原著,本书译文中的有些用词可能与国内的其他书不太一致,例如第1章出现的“die”,有的书称为“芯片”(这种解释会与“chip”混淆),有的书称为“模具”。我根据自己4年的微处理器工程项目经验,并咨询了芯片设计开发的专业人士,最终将“die”解释为“管芯”,即芯片中的裸片(事实上,专业人士沟通时通常直接使用“die”而非中文定义)。本书中很多地方在首次给出中文解释后都直接使用了英文名词(例如load/store),因为有些定义只可“意会”不可“言传”,相信读者完全可以体会这些名词的含义,而不需要拘泥于中文翻译。这些地方请读者阅读时注意。
在翻译过程中,我们也发现了原著中的一些笔误与不妥之处,译稿中已进行了纠正。还有一些标有“译者注”的地方,是我们根据对原文的理解并结合多年工程和研究工作中的经验所做的一些补充说明,以便于读者阅读。
全书主要由我逐字翻译并校对。研究生刘文杰、王璐、王博千参与了部分内容的翻译和资料整理工作。在本书的翻译过程中,还得到了国防科技大学王志英教授、机械工业出版社华章分社温莉芳副总经理、ARM教育生态部总监陈炜博士的热情指导和鼓励。机械工业出版社华章分社曲熠编辑也为本书的翻译和出版提出了大量宝贵意见。在此,谨向他们表示衷心的感谢。
感谢本书前4版以及第5版MIPS版的译者清华大学郑纬民教授、西北工业大学康继昌教授、樊晓桠教授、王党辉副教授、安建峰副教授等,他们的工作使得这本重要的教材在国内有了广泛的读者,也使第5版ARM版的翻译有了很好的基础和参考。
在此也要感谢我的家人,正是由于他们的全力支持,使我能全身心投入到自己所热爱的工作之中。特别感谢我的儿子安之,当我工作繁忙加班加点时,五岁的他总是在办公室安静地伴我左右。
翻译是一件很难做得完美的事,尽管我们常常为了一个名词而请教相关方向的专家并反复斟酌,但由于时间及水平的限制,难免还有错误及欠妥之处。请各位读者批评指正,并提出宝贵意见,欢迎发送电子邮件至cod5_arm @ qq.com。
今日写序,正值端午,想起屈大夫“路漫漫其修远兮,吾将上下而求索”的心志。当前正是我国信息技术创新、两化深度融合、IT服务全面改革以及推动社会与经济健康进步的关键时期。中兴事件之后,国人愈发认识到核心技术亟须攻克。肩负新型计算系统设计与开发责任的计算机专业人员需要具有系统级的设计、实现和应用能力,才能为实现国家发展目标做出贡献。这需要从事计算机研究和教学的人士以及读者的共同努力。今日未济,明日可期。

陈微
2018年端午于长沙

图书目录

出版者的话
赞誉
译者序
前言
作者简介
第1章 计算机的抽象与技术 1
1.1 引言 1
1.1.1 计算机应用的分类和特点 2
1.1.2 欢迎来到后PC时代 3
1.1.3 你能从本书中学到什么 4
1.2 计算机体系结构中的8个伟大思想 6
1.2.1 面向摩尔定律的设计 6
1.2.2 使用抽象简化设计 7
1.2.3 加速大概率事件 7
1.2.4 通过并行提高性能 7
1.2.5 通过流水线提高性能 7
1.2.6 通过预测提高性能 7
1.2.7 存储器层次结构 7
1.2.8 通过冗余提高可靠性 7
1.3 程序表象之下 8
1.4 硬件包装之下 10
1.4.1 显示器 11
1.4.2 触摸屏 12
1.4.3 打开机箱 13
1.4.4 数据的安全存储 15
1.4.5 与其他计算机通信 16
1.5 处理器和存储器制造技术 17
1.6 性能 20
1.6.1 性能的定义 20
1.6.2 性能的度量 22
1.6.3 CPU的性能及其度量因素 24
1.6.4 指令的性能 24
1.6.5 经典的CPU性能公式 25
1.7 功耗墙 28
1.8 沧海巨变:从单处理器向多处理器转变 29
1.9 实例:Intel Core i7基准测试 32
1.9.1 SPEC CPU基准测试程序 32
1.9.2 SPEC功耗基准测试程序 34
1.10 谬误与陷阱 34
1.11 本章小结 36
1.12 历史观点与拓展阅读 37
1.13 练习题 38
第2章 指令:计算机的语言 42
2.1 引言 42
2.2 计算机硬件的操作 44
2.3 计算机硬件的操作数 46
2.3.1 存储器操作数 47
2.3.2 常数或立即数操作数 50
2.4 有符号数和无符号数 51
2.5 计算机中指令的表示 56
2.6 逻辑操作 61
2.7 决策指令 64
2.7.1 循环 65
2.7.2 边界检查的简便方法 67
2.7.3 case/switch语句 67
2.8 计算机硬件对过程的支持 68
2.8.1 使用更多的寄存器 69
2.8.2 过程嵌套 71
2.8.3 在栈中为新数据分配空间 73
2.8.4 在堆中为新数据分配空间 74
2.9 人机交互 76
2.10 LEGv8中的宽立即数和地址的寻址 79
2.10.1 宽立即数 79
2.10.2 分支中的寻址 80
2.10.3 LEGv8寻址模式总结 82
2.10.4 机器语言解码 82
2.11 并行与指令:同步 86
2.12 翻译并启动程序 88
2.12.1 编译器 88
2.12.2 汇编器 89
2.12.3 链接器 90
2.12.4 加载器 92
2.12.5 动态链接库 92
2.12.6 启动Java程序 94
2.13 综合实例:C排序程序 95
2.13.1 swap过程 95
2.13.2 sort过程 97
2.14 数组和指针 101
2.14.1 用数组实现clear 102
2.14.2 用指针实现clear 102
2.14.3 比较两个版本的clear 103
2.15 高级主题:编译C和解释Java 104
2.16 实例:MIPS指令集 104
2.17 实例:ARMv7(32位)指令集 105
2.18 实例:x86指令集 106
2.18.1 Intel x86的演进 107
2.18.2 x86寄存器和数据寻址模式 108
2.18.3 x86整数操作 110
2.18.4 x86指令编码 112
2.18.5 x86总结 112
2.19 实例:ARMv8指令集的其他部分 113
2.19.1 完整的ARMv8整数算术逻辑指令 114
2.19.2 完整的ARMv8整数数据传输指令 116
2.19.3 完整的ARMv8分支指令 117
2.20 谬误与陷阱 118
2.21 本章小结 119
2.22 历史观点与拓展阅读 121
2.23 练习题 121
第3章 计算机的算术运算 128
3.1 引言 128
3.2 加法和减法 128
3.3 乘法 131
3.3.1 顺序乘法算法及硬件 131
3.3.2 有符号乘法 134
3.3.3 更快速的乘法 134
3.3.4 LEGv8中的乘法 134
3.3.5 小结 135
3.4 除法 135
3.4.1 除法算法及硬件 135
3.4.2 有符号除法 137
3.4.3 更快速的除法 138
3.4.4 LEGv8中的除法 138
3.4.5 小结 139
3.5 浮点运算 140
3.5.1 浮点表示 141
3.5.2 异常和中断 142
3.5.3 IEEE 754浮点标准 142
3.5.4 浮点加法 145
3.5.5 浮点乘法 148
3.5.6 LEGv8中的浮点指令 150
3.5.7 算术精确性 154
3.5.8 小结 156
3.6 并行与计算机算术:子字并行 157
3.7 实例:x86中的流处理SIMD扩展和高级向量扩展 158
3.8 实例:其他的ARMv8算术指令 160
3.8.1 完整的ARMv8整数和浮点算术指令 160
3.8.2 完整的ARMv8 SIMD指令 161
3.9 加速:子字并行和矩阵乘法 163
3.10 谬误与陷阱 166
3.11 本章小结 168
3.12 历史观点与拓展阅读 171
3.13 练习题 171
第4章 处理器 175
4.1 引言 175
4.1.1 一种基本的LEGv8实现 176
4.1.2 实现概述 176
4.2 逻辑设计的一般方法 178
4.3 建立数据通路 180
4.4 一种简单的实现机制 187
4.4.1 ALU控制 187
4.4.2 主控制单元的设计 188
4.4.3 数据通路的操作 191
4.4.4 完成控制单元 194
4.4.5 为什么不使用单周期实现 195
4.5 流水线概述 197
4.5.1 面向流水线的指令集设计 200
4.5.2 流水线冒险 200
4.5.3 流水线概述小结 206
4.6 流水线数据通路及其控制 207
4.6.1 图形化表示的流水线 215
4.6.2 流水线控制 218
4.7 数据冒险:旁路与阻塞 221
4.8 控制冒险 231
4.8.1 假定分支不发生 231
4.8.2 减少分支延迟 232
4.8.3 动态分支预测 234
4.8.4 流水线小结 236
4.9 异常 236
4.9.1 LEGv8体系结构中的异常处理 237
4.9.2 流水线实现中的异常 238
4.10 指令级并行 241
4.10.1 推测的概念 242
4.10.2 静态多发射 243
4.10.3 动态多发射 246
4.10.4 动态流水线调度 247
4.10.5 能耗效率与高级流水线 249
4.11 实例:ARM Cortex-A53和Intel Core i7流水线 250
4.11.1 ARM Cortex-A53 251
4.11.2 Intel Core i7 920 253
4.11.3 Intel Core i7 920的性能 255
4.12 加速:指令级并行和矩阵乘法 256
4.13 高级主题:采用硬件设计语言描述和建模流水线的数字设计技术以及更多流水线示例 258
4.14 谬误与陷阱 258
4.15 本章小结 259
4.16 历史观点与拓展阅读 260
4.17 练习题 260
第5章 大容量和高速度:开发存储器层次结构 271
5.1 引言 271
5.2 存储器技术 275
5.2.1 SRAM技术 275
5.2.2 DRAM技术 275
5.2.3 闪存 277
5.2.4 磁盘存储器 277
5.3 cache的基本原理 279
5.3.1 cache访问 280
5.3.2 cache缺失处理 285
5.3.3 写操作处理 285
5.3.4 cache实例:Intrinsity FastMATH处理器 287
5.3.5 小结 289
5.4 cache性能的评估和改进 289
5.4.1 通过更灵活的块放置策略来减少cache缺失 292
5.4.2 在cache中查找块 295
5.4.3 替换块的选择 296
5.4.4 使用多级cache减少缺失代价 297
5.4.5 通过分块进行软件优化 299
5.4.6 小结 303
5.5 可信存储器层次结构 303
5.5.1 失效的定义 303
5.5.2 纠1检2汉明码(SEC/DED) 305
5.6 虚拟机 308
5.6.1 虚拟机监视器的要求 309
5.6.2 指令集体系结构(缺乏)对虚拟机的支持 309
5.6.3 保护和指令集体系结构 310
5.7 虚拟存储器 310
5.7.1 页的存放和查找 313
5.7.2 缺页故障 315
5.7.3 用于大型虚拟地址的虚拟内存 316
5.7.4 关于写 318
5.7.5 加快地址转换:TLB 318
5.7.6 Intrinsity FastMATH TLB 319
5.7.7 集成虚拟存储器、TLB和cache 322
5.7.8 虚拟存储器中的保护 323
5.7.9 处理TLB缺失和缺页 324
5.7.10 小结 326
5.8 存储器层次结构的一般框架 328
5.8.1 问题1:块放在何处 328
5.8.2 问题2:如何找到块 329
5.8.3 问题3:cache缺失时替换哪一块 330
5.8.4 问题4:写操作如何处理 330
5.8.5 3C:一种理解存储器层次结构行为的直观模型 331
5.9 使用有限状态机控制简单的cache 332
5.9.1 一个简单的cache 333
5.9.2 有限状态机 333
5.9.3 一个简单cache控制器的有限状态机 335
5.10 并行与存储器层次结构:cache一致性 336
5.10.1 实现一致性的基本方案 337
5.10.2 监听协议 337
5.11 并行与存储器层次结构:廉价冗余磁盘阵列 339
5.12 高级主题:实现cache控制器 339
5.13 实例:ARM Cortex-A53和Intel Core i7的存储器层次结构 339
5.14 实例:ARMv8系统的剩余部分以及特殊指令 343
5.15 加速:cache分块和矩阵乘法 345
5.16 谬误与陷阱 346
5.17 本章小结 349
5.18 历史观点与拓展阅读 350
5.19 练习题 350
第6章 并行处理器:从客户端到云 362
6.1 引言 362
6.2 创建并行处理程序的难点 364
6.3 SISD、MIMD、SIMD、SPMD和向量 367
6.3.1 x86中的SIMD:多媒体扩展 368
6.3.2 向量 368
6.3.3 向量与标量 370
6.3.4 向量与多媒体扩展 370
6.4 硬件多线程 372
6.5 多核和其他共享内存多处理器 375
6.6 图形处理单元 378
6.6.1 NVIDIA GPU体系结构简介 379
6.6.2 NVIDIA GPU存储结构 380
6.6.3 正确理解GPU 381
6.7 集群、仓储式计算机和其他消息传递多处理器 383
6.8 多处理器网络拓扑简介 386
6.9 与外界通信:集群网络 389
6.10 多处理器基准测试程序和性能模型 389
6.10.1 性能模型 391
6.10.2 Roof?line模型 392
6.10.3 两代Opteron的比较 393
6.11 实例:Intel Core i7 960
 和NVIDIA Tesla GPU的评测及Roof?line模型 396
6.12 加速:多处理器和矩阵乘法 399
6.13 谬误与陷阱 402
6.14 本章小结 403
6.15 历史观点与拓展阅读 405
6.16 练习题 405
附录A 逻辑设计基础 414
索引 470
网络内容
附录B 图形处理单元
附录C 控制器的硬件实现
附录D RISC指令集体系结构
术语表
扩展阅读

教学资源推荐
作者: Joseph A. Fisher Paolo Faraboschi Cliff Young
作者: [美] J. 斯坦利·沃法德(J. Stanley Warford)著
作者: 陈仪香 陈彦辉 编著
参考读物推荐
作者: 国际商业机器中国有限公司
作者: [土耳其] 卡格特·古尔图克(Cagatay Gurturk)著
作者: (美)Sun Microsystems, Inc
作者: (美)Elecia White 著