猜你喜欢
计算机组成与设计:硬件/软件接口

计算机组成与设计:硬件/软件接口

书籍作者:[美] 戴维·A. ISBN:9787111652144
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:7984
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
下载地址
内容简介

本书由2017年图灵奖得主Patterson和Hennessy共同撰写,是计算机体系结构领域的经典书籍,强调软硬件协同设计及其对性能的影响。本书采用开源的RISC-V指令系统体系结构, 讲解硬件技术、汇编语言、算术运算、流水线、存储层次、I/O以及并行处理器。新内容涵盖平板电脑、云基础设施、ARM(移动计算设备)以及x86(云计算)体系结构,新实例包括Intel Core i7、ARM Cortex-A53以及NVIDIA Fermi GPU。本书适合计算机体系结构领域的专业技术人员参考,也适合高等院校计算机相关专业的学生阅读。


作者简介

作者简介
戴维·A. 帕特森(David A. Patterson)
Patterson与Hennessy共同荣获了2017年度“图灵奖”,以表彰他们在计算机体系结构领域的开创性贡献。Patterson现为Google杰出工程师,之前为加州大学伯克利分校教授。他曾任ACM主席一职,目前是ACM和IEEE会士,美国艺术与科学院和计算机历史博物馆院士,并入选了美国国家工程院、国家科学院和硅谷工程名人堂。他领导了RISC I的设计与实现工作,并且是RAID项目的领导者。
约翰·L. 亨尼斯(John L. Hennessy)
Hennessy与Patterson共同荣获了2017年度“图灵奖”。Hennessy现为Google母公司Alphabet的董事长,之前曾任斯坦福大学第十任校长。他是IEEE和ACM会士,美国国家工程院、国家科学院、美国哲学院以及美国艺术与科学院院士。他于1981年开始研究MIPS项目,之后创办MIPS Computer Systems公司,开发了最早的商用RISC微处理器之一。他还领导了DASH项目,设计了第一个可扩展cache一致性多处理器原型。

译者简介
易江芳
北京大学信息科学技术学院计算机系副教授,长期从事微处理器体系结构设计和性能优化科研及教学工作,近年来主持和参加了国家科技重大专项、北京市科委等十余项科研项目,参与了北京大学“众志”系列自主CPU系统芯片的设计、验证和流片工作,发表论文10余篇。曾获北大方正奖教金,主持了北京大学计算机体系结构实习课程的教改项目。


刘先华
北京大学信息科学技术学院计算机系副教授,长期从事计算机系统结构和编译优化科研及教学工作,近年来主持和参加了国家自然科学基金、国家科技重大专项等十余项科研项目,参与研发了北京大学“众志”系列自主CPU及配套软硬件系统并开展了相关产业化工作,发表论文20余篇。曾获首届“全国高校计算机专业优秀教师”奖励、宝钢奖教金、北京大学教学优秀奖等荣誉。


编辑推荐

本书是经典著作《计算机组成与设计》继MIPS版、ARM版之后的*新版本,这一版全面切换至RISC-V(64位),精选并讲解其核心指令,同时结合“硬件/软件接口”和“详细阐述”等模块,为不同基础和侧重的读者铺设了深入研究的路径,是Patterson和Hennessy的又一力作。

紧跟后PC时代的发展浪潮,关注并行技术,新内容涵盖平板电脑、云基础设施、ARM(移动计算设备)以及x86(云计算)体系结构,新实例包括Intel Core i7、ARM Cortex-A53以及NVIDIA Fermi GPU。

新增矩阵乘法实例,随着章节推进不断“加速”程序,分别采用子字并行、指令级并行、cache分块技术和线程级并行,仅增加24行代码便使性能翻了200倍,直观呈现出硬件对提高能效的重要性。

强调计算机体系结构中的8个伟大思想:并行,流水线,预测,摩尔定律,存储层次,抽象,加速经常性事件,可靠性。对这些思想的应用贯穿全书,引用总数约100次,反映了技术精髓所在。


《计算机组成与设计:硬件/软件接口》电子书免费下载

pdf下载 txt下载 epub下载 mobi下载 azw3下载

前言

我们能体验的最美好的事情莫过于神秘,它是所有真实的艺术和科学的源泉。

—阿尔伯特·爱因斯坦,《我的信仰》,1930年

关于本书

我们认为,在学习计算机科学与工程时,除了掌握计算的基本原理外,还应该了解该领域的最新进展。同时,我们还认为,各种计算领域中的读者都应学习计算机系统的组成理论,因为这是决定计算机系统的功能、性能、能耗甚至最终成功与否的关键。

现代计算机技术需要各个计算领域的专业人员对计算机软件和硬件都有所了解。软硬件在不同层次上的相互影响,恰好也提供了一个理解计算基础的框架。不管你的关注点是硬件还是软件,专业是计算机科学还是电子工程,计算机组成和设计的核心思想都是相同的。因此,本书的重点是展示硬件和软件之间的关系,并重点关注现代计算机的基本概念。

本书从第1版起就提出了以上观点,最近从单处理器向多核微处理器的转变再一次见证了这个颇有远见的观点。然而,编程人员无视我们的忠告,不想改造程序,只想依赖计算机体系结构设计者、编译器设计者或者芯片设计者来让自己的程序运行得更快、能效性更好—这样的时代已经一去不复返了。为了运行得更快,需要把程序改造成并行的。让程序员尽可能不知道它们正在使用的底层硬件的并行属性,这是许多研究者的目标,但这需要花费很长时间才能实现。我们的观点是,至少在接下来的十年里,如果想让程序在并行计算机上运行得更为高效,大多数编程人员还是需要了解硬件/软件接口的。

本书的读者包括不了解汇编语言或者逻辑设计,但需要了解计算机基本组成的人;同时也包括拥有汇编语言或者逻辑设计背景,但想学习如何设计计算机或者想搞清楚系统的工作原理及原因的人。

关于另一本书

有些读者可能已经熟悉我们的另一本书——Computer Architecture: A Quantitative Approach(《计算机体系结构:量化研究方法》,后文简称为《量化研究》)。该书已广为流传,经常以作者姓名命名,称为Hennessy和Patterson。(本书则常被称为Patterson和Hennessy。)我们写《量化研究》的动机是,希望能够使用坚实的工程基础、成本/性能之间的量化分析和折中来描述计算机体系结构的基本原则。我们使用的方法是,基于商业系统,将实例与评估相结合,建立真实的设计体验。我们的目标是证实可以使用量化分析的方法而不是描述性方法来学习计算机体系结构。希望这一方法有助于培养能精准理解计算机的专业人才。

本书的大多数读者并不一定要成为计算机体系结构设计者。但是,未来软件系统的性能和能效性,很大程度上取决于软件设计者对所使用系统的基本硬件技术的了解程度。因此,编译器设计者、操作系统设计者、数据库编程人员以及大多数其他软件设计人员需要对本书中提到的基本原则有深入的理解。同样,硬件设计人员也需要清楚地知道自己的设计对软件应用程序的影响。

因此,本书不仅仅是《量化研究》一书的子集,我们已经对本书进行了大幅修订以满足不同读者的需要。我们非常高兴地看到《量化研究》的后续版本也在不断修订,删除了大量的介绍性材料。相比第1版,此后两本书之间的内容重叠会越来越少。

关于RISC-V版本

选择合适的指令系统对于计算机体系结构教材来说至关重要。不管是否为主流指令系统,我们都不希望介绍那些具有不必要的新奇特性的指令系统。理想情况是,你学习的第一个指令系统应该是一个典范,就像你的初恋一样。令人惊讶的是,你学习的第一个指令系统和你的初恋都会令你分外怀念。

由于当时有太多选择,所以在《量化研究》的第1版中我们提出了自己的RISC风格指令系统。之后,MIPS指令系统因其简洁的风格而日益受到关注,我们在本书第1版时选择了它,并且《量化研究》的后续版本也是如此。MIPS一直为我们和读者提供了很好的服务。

20年来,使用MIPS指令系统的芯片成千上万,并且还在不断生产出来,它们一般用于嵌入式设备,而该领域的指令系统几乎不可见,因此,目前很难找到一台真实的计算机,让读者能够下载并运行MIPS程序。

好消息是,最近一个开放的RISC指令系统首次亮相,并快速获得了不少追随者。它就是由加州大学伯克利分校(UC Berkeley)开发的RISC-V指令系统,它不仅消除了MIPS指令系统的弊病,而且还具备指令系统应有的简洁、优雅和现代的特点。

RISC-V指令系统不是闭源的,它提供了一套开源的模拟器、编译器、调试器等,这些都很容易获得。它甚至还提供开源的使用硬件描述语言编写的RISC-V处理器实现。除此之外,很快还会提供低成本的硬件平台,供运行RISC-V程序使用。读者不仅可以学习这些设计,还能修改它们并贯穿整个实现流程,以充分了解这些修改对性能、晶片面积和能耗方面的影响。

这对于计算产业和教育行业来说是一个令人激动的机会。截止到写这篇前言之时,已经有40多家公司加入到RISC-V基金会中,赞助商名单几乎囊括了除ARM和Intel以外的所有主要厂商,包括AMD、Google、HP、IBM、Microsoft、NVIDIA、Oracle和Qualcomm公司。

正是因为这些,我们为本书撰写了RISC-V版本,同样,《量化研究》也有对应版本。

RISC-V同时提供32位和64位指令系统,它们的指令类型基本相同。我们可以切换指令系统,并保持地址宽度为32位。我们的出版商调查了本书的读者群,发现75%的读者首选大型或中型地址空间,因此我们选用64位地址空间,这比32位地址空间更有意义。

相比MIPS版本,RISC-V版本唯一的修改就是那些与指令系统相关的描述,主要影响第2、3和5章中的虚拟存储部分,以及第6章中的VMIPS示例。在第4章中,我们改用RISC-V指令,修改了相关的图表,添加了一些“详细阐述”模块,这些变化没有我们想象中那么复杂。第1章和其余的附录几乎没有变化。由于存在大量的在线文档,并且与RISC-V相关的修改过多,这使得MIPS版本中的附录A很难被替换(附录A是指“汇编器、链接器和SPIM模拟器”,详见MIPS第5版)。另外,第2、3和5章中包含上百条RISC-V指令的快速概览,这些指令都不在本书详细介绍的RISC-V核心指令范围内。

请注意,我们并没有正式地、永久地切换到RISC-V指令系统。比如,除了新出的RISC-V版本,目前还可以购买本书的ARMv8版和MIPS版。未来存在如下可能性:读者需要所有不同指令系统的版本,或可能只需要一个版本。船到桥头自然直,目前我们期待你对此次修改的反馈。

第5版中的改变

在本书的第5版中我们有6个主要的修订目标:

使用实际运行的实例来证实理解硬件的重要性。

对于第1章中提到的8个伟大思想,在后面每次应用这些思想时予以突出显示。

更新实例以反映从PC时代到后PC时代的转变。

将和I/O有关的资料分布到书中各章节,而不是将其作为单独的一章。

更新技术内容,以反映自2009年第4版出版以来工业界的变化。

将附录和可选章节放到网上,而不是放到CD中,这样可降低成本,并使得本书和电子书一样方便。

在详细讨论这些修订目标之前,我们先看一看下表。它展示的是分别为软硬件人员设计的导读方案。不论自身经验和关注点如何,第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、仓储级计算机以及集群系统中的关键——网卡的软硬件接口设计。


本书第5版的6大修订目标中,首要目标是使用实例证实理解现代硬件对于提高性能和能效的重要性。正如之前提到的,为将矩阵乘法的性能提高4倍,我们在第3章中介绍了子字并行技术。在第4章中,我们通过循环展开将性能又提高2倍,这说明了指令级并行技术的有效性。在第5章中,通过使用cache块优化技术,我们将矩阵乘法的性能再次成倍提升。最后,在第6章中,我们使用16个处理器通过线程级并行技术获得了14倍的性能加速。上述4项优化加在一起,只在原始矩阵乘法示例中添加了24行C代码。

第二个修订目标是,指出计算机体系结构中的8个重要思想,并在其出现时予以突出显示,以此来帮助读者从树木中找出森林,尽早建立对计算机系统的整体认知。本书中有将近100次提及这8个重要思想,每一章中对重要思想的举例都不少于7个,每一个重要思想都至少被提及5次。通过并行、流水线和预测技术改善性能是三种最流行的重要设计思想,另一个重要思想就是摩尔定律。在第4章中,与处理器相关的例子是最多的。这并不奇怪,因为计算机体系结构设计者最关注的可能就是处理器。在每个章节都可以发现的一个重要思想就是通过并行改善性能。这是个令人愉快的现象,因为最近在本领域和本书的这个版本中都在强调并行性。

本书的第三个修订目标是,通过我们的实例和材料使读者认识到计算技术正从PC时代向后PC时代转变。因此,第1章深入到平板电脑而不是个人电脑内部,第6章描述了云计算基础设施。我们还介绍了ARM,这是后PC时代个人移动设备的指令系统选择,与之对应的是,x86是PC时代和云计算时代的主流指令系统。

第四个修订目标是将I/O相关内容分散到整本书中,而不是集中在独立的一章。这和我们在第4版中将并行相关内容分散到整本书中一样。本书的I/O相关内容可以在1.4节、4.9节、5.2节、5.5节、5.11节和6.9节中找到。这样做的初衷是,如果I/O没有独立成章,那么读者(和教师)可能更容易阅读和使用这些内容。

计算机体系结构是一个快速发展的领域,相关书籍的重要目标之一就是更新技术内容。新版本的书也需要如此,这就是我们的第五个目标。本书选择的运行实例是对后PC时代产生重要影响的ARM Cortex A53和Intel Core i7。其他重要内容包括一份关于GPU的教程,它解释了GPU中独有的术语;此外,我们还更为深入地介绍了构成云的仓储级计算机和万兆字节以太网卡。

最后一个目标是,为保持本书主体部分简短,并与电子书兼容,我们将可选阅读材料作为附录放在网上,而不是像之前那样保存在附带的CD上。

最后,我们还更新了本书的所有练习。

虽然发生了不少变化,但我们依然保留了旧版本中那些有用的元素。为使本书更适合作为参考书籍,我们仍在新术语第一次出现时在页边给出它们的定义。书中名为“理解程序性能”的模块是用来帮助读者理解如何改善程序性能的,同样,“硬件/软件接口”模块是用来帮助读者了解该接口并进行软硬件划分权衡的。书中仍保留“重点”模块,帮助读者从一片树木中看出森林。“自我检测”部分在每一章的结尾都附有答案,可以帮助读者第一时间确认自己对书中内容的理解。本版本也包括了RISC-V的参考数据卡,这是受到了IBM 360系统“绿卡”的启发。该卡片已更新,适于在书写RISC-V汇编程序时作为参考资料使用。

教学支持

我们收集了大量的资料,帮助教师使用本书进行授课。只要教师在出版商处进行注册,就能获得练习答案、书中的图表、教学讲义以及其他资料。除此之外,配套网站还提供了开源RISC-V软件的下载链接。如需更多信息,可访问出版商网站:booksite.elsevier.com/9780128122754。

结束语

从后续的致谢一节可以看到,我们花了大量的时间来进行修订。这本书多次再版,经过了多次印刷,我们也有机会不断完善。如果你在此版中发现任何一处错误或漏洞,可通过电子邮件[email protected]联系出版商。

本书的这一版本是Hennessy和Patterson自1989年长期合作以来的第三次突破。由于要管理一所世界一流大学,这意味着Hennessy校长无法再对编写一个新版本做出实质性的承诺。这使得另一位作者再次感到自己像一个没有安全措施就走上钢丝的人。因此,伯克利的同事和致谢中提到的人在本书的内容方面发挥了更大的作用。无论如何,这一次只有一位作者会对你所阅读的新内容负责。

致谢

对于本书的每一个版本,我们都很幸运地得到了许多读者、审稿人和其他贡献者的帮助。这些人的帮助使这本书变得更好。

我们非常感谢Khaled Benkrid以及他在ARM公司的同事,他们非常认真地检查了ARM的相关材料,并提供了有益的反馈。

我们对第6章进行了大幅修订,对其中的观点和内容分别进行了审查,针对每一位审稿人的意见都进行了修改。感谢Christos Kozyrakis(Stanford University),是他建议我们使用集群系统的网络接口作为实例来说明I/O的软硬件接口划分,并对该章的内容组织给出了意见。感谢Mario Flagsilk(Stanford University),是他提供了和NetFPGA NIC平台相关的技术细节、图表和性能评估数据。感谢以下人员对第6章提出了修改建议:David Kaeli(Northeastern University)、Partha Ranganathan(HP Labs)、David Wood(University of Wisconsin),以及我在Berkeley的同事Siamak Faridani、Shoaib Kamil、Yunsup Lee、Zhangxi Tan和Andrew Waterman。

特别感谢Rimas Avizenis(UC Berkeley),是他改写了各种版本的矩阵乘法并提供了性能数据。当我还是UCLA的研究生时,我和他的父亲一起工作,能与Rimas在UC Berkeley共事是一件美好的事情。

同时,还要感谢我的长期合作者——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(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)开发。

特别的感谢送给Peter Ashenden,他帮我们更新了课程讲义。

……

David A. Patterson


目录

出版者的话

赞誉

译者序

前言

作者简介

第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 数据安全 16

1.4.5 与其他计算机通信 16

1.5 处理器和存储制造技术 17

1.6 性能 20

1.6.1 性能的定义 21

1.6.2 性能的度量 23

1.6.3 CPU性能及其度量因素 24

1.6.4 指令性能 25

1.6.5 经典的CPU性能公式 26

1.7 功耗墙 28

1.8 沧海巨变:从单处理器向多处理器转变 30

1.9 实例:评测Intel Core i7 32

1.9.1 SPEC CPU基准评测程序 33

1.9.2 SPEC功耗基准评测程序 34

1.10 谬误与陷阱 35

1.11 本章小结 37

1.12 历史视角和拓展阅读 38

1.13 练习 38

第2章 指令:计算机的语言 43

2.1 引言 43

2.2 计算机硬件的操作 45

2.3 计算机硬件的操作数 47

2.3.1 存储器操作数 48

2.3.2 常数或立即数操作数 51

2.4 有符号数与无符号数 52

2.5 计算机中的指令表示 57

2.6 逻辑操作 62

2.7 用于决策的指令 65

2.7.1 循环 66

2.7.2 边界检查的简便方法 67

2.7.3 case/switch语句 68

2.8 计算机硬件对过程的支持 68

2.8.1 使用更多的寄存器 69

2.8.2 嵌套过程 71

2.8.3 在栈中为新数据分配空间 73

2.8.4 在堆中为新数据分配空间 74

2.9 人机交互 76

2.10 对大立即数的RISC-V编址和寻址 79

2.10.1 大立即数 79

2.10.2 分支中的寻址 80

2.10.3 RISC-V寻址模式总结 82

2.10.4 机器语言译码 83

2.11  指令与并行性:同步 85

2.12 翻译并启动程序 87

2.12.1 编译器 87

2.12.2 汇编器 87

2.12.3 链接器 89

2.12.4 加载器 91

2.12.5 动态链接库 91

2.12.6 启动Java程序 93

2.13 以C排序程序为例的汇总整理 94

2.13.1 swap过程 94

2.13.2 sort过程 95

2.14 数组与指针 100

2.14.1 用数组实现clear 100

2.14.2 用指针实现clear 101

2.14.3 比较两个版本的clear 102

2.15 高级专题:编译C语言和解释Java语言 102

2.16 实例:MIPS指令 103

2.17 实例:x86指令 104

2.17.1 Intel x86的演变 104

2.17.2 x86寄存器和寻址模式 106

2.17.3 x86整数操作 107

2.17.4 x86指令编码 109

2.17.5 x86总结 110

2.18 实例:RISC-V指令系统的剩余部分 111

2.19 谬误与陷阱 112

2.20 本章小结 113

2.21 历史视角和扩展阅读 115

2.22 练习 115

第3章 计算机的算术运算 121

3.1 引言 121

3.2 加法和减法 121

3.3 乘法 124

3.3.1 串行版的乘法算法及其硬件实现 124

3.3.2 带符号乘法 127

3.3.3 快速乘法 127

3.3.4 RISC-V中的乘法 127

3.3.5 总结 128

3.4 除法 128

3.4.1 除法算法及其硬件实现 128

3.4.2 有符号除法 131

3.4.3 快速除法 131

3.4.4 RISC-V中的除法 132

3.4.5 总结 132

3.5 浮点运算 133

3.5.1 浮点表示 134

3.5.2 例外和中断 135

3.5.3 IEEE 754浮点数标准 135

3.5.4 浮点加法 138

3.5.5 浮点乘法 141

3.5.6 RISC-V中的浮点指令 144

3.5.7 精确算术 148

3.5.8 总结 150

3.6 并行性与计算机算术:子字并行 151

3.7 实例:x86中的SIMD扩展和高级向量扩展 151

3.8 加速:子字并行和矩阵乘法 153

3.9 谬误与陷阱 155

3.10 本章小结 158

3.11 历史视角和拓展阅读 159

3.12 练习 159

第4章 处理器 163

4.1 引言 163

4.1.1 一种基本的RISC-V实现 164

4.1.2 实现概述 164

4.2 逻辑设计的一般方法 166

4.3 建立数据通路 169

4.4 一个简单的实现方案 175

4.4.1 ALU控制 175

4.4.2 设计主控制单元 176

4.4.3 数据通路操作 180

4.4.4 控制的结束 182

4.4.5 为什么现在不使用单周期实现 182

4.5 流水线概述 183

4.5.1 面向流水线的指令系统设计 187

4.5.2 流水线冒险 187

4.5.3 总结 193

4.6 流水线数据通路和控制 194

4.6.1 流水线的图形化表示 203

4.6.2 流水线控制 205

4.7 数据冒险:前递与停顿 208

4.8 控制冒险 218

4.8.1 假设分支不发生 218

4.8.2 缩短分支延迟 219

4.8.3 动态分支预测 221

4.8.4 流水线总结 223

4.9 例外 223

4.9.1 RISC-V体系结构中如何处理例外 224

4.9.2 流水线实现中的例外 225

4.10 指令间的并行性 228

4.10.1 推测的概念 229

4.10.2 静态多发射 230

4.10.3 动态多发射处理器 234

4.10.4 高级流水线和能效 237

4.11 实例:ARM Cortex-A53和Intel Core i7流水线结构 238

4.11.1 ARM Cortex-A53 238

4.11.2 Intel Core i7 920 240

4.11.3 Intel Core i7处理器的性能 242

4.12 加速:指令级并行和矩阵乘法 243

4.13 高级专题:数字设计概述——使用硬件设计语言进行流水线建模以及更多流水线示例 246

4.14 谬误与陷阱 246

4.15 本章小结 247

4.16 历史视角和拓展阅读 247

4.17 练习 247

第5章 大而快:层次化存储 258

5.1 引言 258

5.2 存储技术 262

5.2.1 SRAM存储技术 262

5.2.2 DRAM存储技术 262

5.2.3 闪存 264

5.2.4 磁盘 264

5.3 cache基础 266

5.3.1 cache访问 268

5.3.2 处理cache失效 272

5.3.3 处理写操作 273

5.3.4 cache实例:Intrinsity FastMATH处理器 275

5.3.5 总结 276

5.4 cache的性能评估和改进 277

5.4.1 使用更为灵活的替换策略降低cache失效率 279

5.4.2 在cache中查找数据块 283

5.4.3 选择替换的数据块 284

5.4.4 使用多级cache减少失效代价 285

5.4.5 通过分块进行软件优化 287

5.4.6 总结 291

5.5 可靠的存储器层次 291

5.5.1 失效的定义 291

5.5.2 纠正1位错、检测2位错的汉明编码 293

5.6 虚拟机 296

5.6.1 虚拟机监视器的必备条件 297

5.6.2 指令系统体系结构(缺乏)对虚拟机的支持 297

5.6.3 保护和指令系统体系结构 298

5.7 虚拟存储 298

5.7.1 页的存放和查找 301

5.7.2 缺页失效 303

5.7.3 支持大虚拟地址空间的虚拟存储 304

5.7.4 关于写 305

5.7.5 加快地址转换:TLB 306

5.7.6 Intrinsity FastMATH TLB 307

5.7.7 集成虚拟存储、TLB和cache 309

5.7.8 虚拟存储中的保护 311

5.7.9 处理TLB失效和缺页失效 312

5.7.10 总结 314

5.8 存储层次结构的一般框架 315

5.8.1 问题一:块可以被放在何处 315

5.8.2 问题二:如何找到块 316

5.8.3 问题三:当cache发生失效时替换哪一块 317

5.8.4 问题四:写操作如何处理 317

5.8.5 3C:一种理解存储层次结构的直观模型 318

5.9 使用有限状态自动机控制简单的cache 320

5.9.1 一个简单的cache 320

5.9.2 有限状态自动机 321

5.9.3 使用有限状态自动机作为简单的cache控制器 322

5.10 并行和存储层次结构:cache一致性 324

5.10.1 实现一致性的基本方案 325

5.10.2 监听协议 325

5.11 并行与存储层次结构:廉价磁盘冗余阵列 327

5.12 高级专题:实现缓存控制器 327

5.13 实例:ARM Cortex-A53和Intel Core i7的存储层次结构 327

5.14 实例:RISC-V系统的其他部分和特殊指令 331

5.15 加速:cache分块和矩阵乘法 331

5.16 谬误与陷阱 333

5.17 本章小结 336

5.18 历史视角和拓展阅读 337

5.19 练习 337

第6章 并行处理器:从客户端到云 348

6.1 引言 348

6.2 创建并行处理程序的难点 350

6.3 SISD、MIMD、SIMD、SPMD和向量机 354

6.3.1 x86中的SIMD:多媒体扩展 355

6.3.2 向量机 355

6.3.3 向量与标量 356

6.3.4 向量与多媒体扩展 357

6.4 硬件多线程 359

6.5 多核及其他共享内存多处理器 362

6.6 GPU简介 365

6.6.1 NVIDIA GPU体系结构简介 366

6.6.2 NVIDIA GPU存储结构 367

6.6.3 对GPU的展望 368

6.7 集群、仓储级计算机和其他消息传递多处理器 370

6.8 多处理器网络拓扑简介 374

6.9 与外界通信:集群网络 376

6.10 多处理器测试基准和性能模型 377

6.10.1 性能模型 379

6.10.2 Roofline模型 380

6.10.3 两代Opteron的比较 381

6.11 实例:评测Intel Core i7 960 和NVIDIA Tesla GPU的Roofline模型 384

6.12 加速:多处理器和矩阵乘法 388

6.13 谬误与陷阱 390

6.14 本章小结 391

6.15 历史视角和拓展阅读 393

6.16 练习 394

附录A 逻辑设计基础 402

术语表 460

网络内容

附录B 图形处理单元

附录C 将控制映射至硬件

附录D 精简指令系统体系结构计算机

扩展阅读


短评

risc-v版的组成与设计,看看

2020-08-02 12:11:51

很经典的专注,条理清晰,讲解很清楚

2020-06-11 13:51:17

好书,分很多版本,集齐可召唤神龙

2020-06-15 11:58:01

计算机组成与设计:硬件/软件接口的书评

计算机体系结构领域的经典书,书的内容和地位不需要再赘述。这个 RISC-V 版本和之前的版本区别不大,只是把 ARM / MIPS 版本改成了 RISC-V 指令,新增的内容不多,其实看旧版也足够了。 纸质书的遗憾是没有双色印刷,个别地方图例看起来没有英文彩色版的电子书清晰。如果能像 C...

2020-06-23 21:23:41

产品特色