计算机组成与设计:硬件软件接口(原书第版RISC版)

本书是经典著作《计算机组成与设计》继MIPS版、ARM版之后的*版本,这一版全面切换至RISC-V(64位),精选并讲解其核心指令,同时结合“硬件/软件接口”和“详细阐述”等模块,为不同基础和侧重的读者铺设了深入研究的路径,是Patterson和Hennessy的又一力作。
紧跟后PC时代的发展浪潮,关注并行技术,新内容涵盖平板电脑、云基础设施、ARM(移动计算设备)以及x86(云计算)体系结构,新实例包括IntelCorei7、ARMCortex-A53以及NVIDIAFermiGPU。
新增矩阵乘法实例,随着章节推进不断“加速”程序,分别采用子字并行、指令级并行、cache分块技术和线程级并行,仅增加24行代码便使性能翻了200倍,直观呈现出硬件对提高能效的重要性。
强调计算机体系结构中的8个伟大思想:并行,流水线,预测,摩尔定律,存储层次,抽象,加速经常性事件,可靠性。对这些思想的应用贯穿全书,引用总数约100次,反映了技术精髓所在。

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

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

--------------------
目  录
出版者的话

赞誉

译者序

前言

作者简介

第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 实例:评测IntelCorei732

1.9.1 SPECCPU基准评测程序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 用数组实现clear100

2.14.2 用指针实现clear101

2.14.3 比较两个版本的clear102

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

2.16 实例:MIPS指令103

2.17 实例:x86指令104

2.17.1 Intelx86的演变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 IEEE754浮点数标准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 实例:ARMCortex-A53和IntelCorei7流水线结构238

4.11.1 ARMCortex-A53238

4.11.2 IntelCorei7920240

4.11.3 IntelCorei7处理器的性能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实例:IntrinsityFastMATH处理器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 加快地址转换:TLB306

5.7.6 IntrinsityFastMATHTLB307

5.7.7 集成虚拟存储、TLB和cache309

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 使用有限状态自动机控制简单的cache320

5.9.1 一个简单的cache320

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 实例:ARMCortex-A53和IntelCorei7的存储层次结构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 NVIDIAGPU体系结构简介366

6.6.2 NVIDIAGPU存储结构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 实例:评测IntelCorei7960和NVIDIATeslaGPU的Roofline模型384

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

6.13 谬误与陷阱390

6.14 本章小结391

6.15 历史视角和拓展阅读393

6.16 练习394

附录A 逻辑设计基础402

术语表460

网络内容

附录B 图形处理单元

附录C 将控制映射至硬件

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

扩展阅读

#现在前往

精选留言

计算机,组成,设计,硬件
sample
2020-08-30
写留言
签到
投稿
QQ咨询
返回顶部