计算机组成与设计:硬件/软件接口(原书第5版·RISC-V版)图书分享

 计算机组成与设计:硬件/软件接口(原书第5版·RISC-V版)图书分享

《计算机组成与设计:硬件/软件接口(原书第5版·RISC-V版)图书分享》是由图灵奖得主David A. Patterson和John L. Hennessy共同撰写的经典计算机体系结构教材。作者:David A. Patterson、John L. Hennessy。译者:易江芳等。出版社:机械工业出版社。出版时间:2020年6月。ISBN:9787111652144。

本书以开源的RISC-V指令集架构为核心,全面介绍了计算机硬件与软件之间的接口设计。内容涵盖了计算机体系结构的基本概念、指令集设计、硬件技术、流水线设计、存储层次结构、输入/输出系统以及并行处理器等多个方面。
此外,本书还新增了对后PC时代技术变革的讨论,包括平板电脑、云基础设施、ARM(移动计算设备)和x86(云计算)体系结构等内容。书中通过实际案例,如Intel Core i7、ARM Cortex-A53和NVIDIA Fermi GPU,展示了现代计算机体系结构的最新进展。

特色与亮点

  1. RISC-V架构的应用:本书全面切换至RISC-V(64位),并精选其核心指令进行讲解,帮助读者更好地理解硬件与软件的协同设计。
  2. 强调软硬件协同设计:书中深入探讨了硬件与软件之间的交互,强调了这种协同设计对性能提升的重要性。
  3. 新增实例与技术:新增了矩阵乘法实例,展示了通过子字并行、指令级并行、缓存分块技术和线程级并行优化程序性能的过程。
  4. 丰富的学习资源:本书配套网站提供了RISC-V软件工具、教学PPT、练习题答案和附录等资源,方便读者学习。
  5. 关注现代计算环境:书中讨论了移动计算、云计算等现代计算环境的关键概念,反映了计算机体系结构领域的最新趋势。

适用人群

本书适合计算机相关专业的学生作为教材使用,也适合计算机体系结构领域的专业技术人员作为参考书籍。

图书目录

第 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

广告

 

 

如何下载计算机组成与设计硬件/软件接口 RISC-V版 原书第5版 电子书分享

关注老wu博客的公众号,并在公众号里发送对应的下载关键字获取下载链接

关注吴川斌的博客公众号

在公众号里给老吴发消息:

下载|计算机组成与设计RISC-V原书第5版

或者代码

6366

建议复制粘贴过去不会码错字哟,O(∩_∩)O~

吴川斌

吴川斌

Leave a Reply