具体描述
《计算机组成与设计:硬件/软件接口(原书第5版)》是计算机组成与设计的经典畅销教材,第5版经过全面更新,关注后PC时代发生在计算机体系结构领域的革命性变革——从单核处理器到多核微处理器,从串行到并行。本书特别关注移动计算和云计算,通过平板电脑、云体系结构以及ARM(移动计算设备)和x86(云计算)体系结构来探索和揭示这场技术变革。
与前几版一样,本书采用MIPS处理器讲解计算机硬件技术、汇编语言、计算机算术、流水线、存储器层次结构以及I/O等基本功能。
《计算机组成与设计:硬件/软件接口(原书第5版)》特点
更新例题、练习题和参考资料,重点关注移动计算和云计算这两个新领域。
涵盖从串行计算到并行计算的革命性变革,第6章专门介绍并行处理器,每章中都涉及并行硬件和软件的相关主题。
全书采用Intel Core i7、ARM Cortex-A8和NVIDIA Fermi GPU作为实例。
增加“运行更快”这一新实例,说明正确理解硬件技术的重要性,它能使软件性能提高200倍。
讨论并强调计算机体系结构的“8个伟大思想”——通过并行提高性能、通过流水线提高性能、通过预测提高性能、面向摩尔定律的设计、存储器层次、使用抽象简化设计、加速大概率事件和通过冗余提高可靠性。
作者简介
David A. Patterson 加州大学伯克利分校计算机科学系教授,美国国家工程研究院院士,IEEE和ACM会士,曾因成功的启发式教育方法被IEEE授予James H. Mulligan,Jr教育奖章。他因为对RISC技术的贡献而荣获1995年IEEE技术成就奖,而在RAID技术方面的成就为他赢得了1999年IEEE Reynold Johnson信息存储奖。2000年他和John L. Hennessy分享了John von Neumann奖。
John L. Hennessy 斯坦福大学校长,IEEE和ACM会士,美国国家工程研究院院士及美国科学艺术研究院院士。Hennessy教授因为在RISC技术方面做出了突出贡献而荣获2001年的Eckert-Mauchly奖章,他也是2001年Seymour Cray计算机工程奖得主,并且和David A. Patterson分享了2000年John von Neumann奖。
目录信息
本书赞誉
译者序
前言
作者简介
第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 使用抽象简化设计6
1.2.3 加速大概率事件6
1.2.4 通过并行提高性能7
1.2.5 通过流水线提高性能7
1.2.6 通过预测提高性能7
1.2.7 存储器层次7
1.2.8 通过冗余提高可靠性7
1.3 程序概念入门7
1.4 硬件概念入门10
1.4.1 显示器11
1.4.2 触摸屏12
1.4.3 打开机箱12
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性能及其因素23
1.6.4 指令的性能24
1.6.5 经典的CPU性能公式25
1.7 功耗墙27
1.8 沧海巨变:从单处理器向多处理器转变29
1.9 实例:Intel Core i7基准31
1.9.1 SPEC CPU基准测试程序31
1.9.2 SPEC功耗基准测试程序32
1.10 谬误与陷阱33
1.11 本章小结35
1.12 历史观点和拓展阅读36
1.13 练习题36
第2章 指令:计算机的语言40
2.1 引言40
2.2 计算机硬件的操作43
2.3 计算机硬件的操作数44
2.3.1 存储器操作数45
2.3.2 常数或立即数操作数47
2.4 有符号数和无符号数48
2.5 计算机中指令的表示53
2.6 逻辑操作58
2.7 决策指令60
2.7.1 循环61
2.7.2 case/switch语句63
2.8 计算机硬件对过程的支持64
2.8.1 使用更多的寄存器66
2.8.2 嵌套过程67
2.8.3 在栈中为新数据分配空间69
2.8.4 在堆中为新数据分配空间70
2.9 人机交互72
2.10 MIPS中32位立即数和寻址75
2.10.1 32位立即数75
2.10.2 分支和跳转中的寻址76
2.10.3 MIPS寻址模式总结78
2.10.4 机器语言解码79
2.11 并行与指令:同步81
2.12 翻译并执行程序83
2.12.1 编译器83
2.12.2 汇编器84
2.12.3 链接器85
2.12.4 加载器87
2.12.5 动态链接库87
2.12.6 启动一个Java程序89
2.13 以一个C排序程序作为完整的例子90
2.13.1 swap过程90
2.13.2 sort过程91
2.14 数组与指针96
2.14.1 用数组实现clear96
2.14.2 用指针实现clear97
2.14.3 比较两个版本的clear97
2.15 高级内容:编译C语言和解释Java语言98
2.16 实例:ARMv7(32位)指令集98
2.16.1 寻址模式99
2.16.2 比较和条件分支100
2.16.3 ARM的特色100
2.17 实例:x86指令集102
2.17.1 Intel x86的改进102
2.17.2 x86寄存器和数据寻址模式103
2.17.3 x86整数操作105
2.17.4 x86指令编码107
2.17.5 x86总结108
2.18 实例:ARMv8(64位)指令集108
2.19 谬误与陷阱109
2.20 本章小结110
2.21 历史观点和拓展阅读111
2.22 练习题112
第3章 计算机的算术运算117
3.1 引言117
3.2 加法和减法117
3.3 乘法121
3.3.1 顺序的乘法算法和硬件121
3.3.2 有符号乘法124
3.3.3 更快速的乘法124
3.3.4 MIPS中的乘法124
3.3.5 小结125
3.4 除法125
3.4.1 除法算法及其硬件结构125
3.4.2 有符号除法128
3.4.3 更快速的除法128
3.4.4 MIPS中的除法129
3.4.5 小结129
3.5 浮点运算130
3.5.1 浮点表示131
3.5.2 浮点加法135
3.5.3 浮点乘法138
3.5.4 MIPS中的浮点指令139
3.5.5 算术精确性145
3.5.6 小结146
3.6 并行性和计算机算术:子字并行148
3.7 实例:x86中流处理SIMD扩展和高级向量扩展149
3.8 加速:子字并行和矩阵乘法150
3.9 谬误与陷阱153
3.10 本章小结155
3.11 历史观点和拓展阅读158
3.12 练习题159
第4章 处理器162
4.1 引言162
4.2 逻辑设计的一般方法165
4.3 建立数据通路167
4.4 一个简单的实现机制173
4.4.1 ALU控制173
4.4.2 主控制单元的设计175
4.4.3 为什么不使用单周期实现方式181
4.5 流水线概述182
4.5.1 面向流水线的指令集设计186
4.5.2 流水线冒险186
4.5.3 对流水线概述的小结191
4.6 流水线数据通路及其控制192
4.6.1 图形化表示的流水线200
4.6.2 流水线控制203
4.7 数据冒险:旁路与阻塞206
4.8 控制冒险214
4.8.1 假定分支不发生215
4.8.2 缩短分支的延迟215
4.8.3 动态分支预测216
4.8.4 流水线小结220
4.9 异常221
4.9.1 MIPS体系结构中的异常处理221
4.9.2 在流水线实现中的异常222
4.10 指令级并行226
4.10.1 推测的概念227
4.10.2 静态多发射处理器227
4.10.3 动态多发射处理器231
4.10.4 能耗效率与高级流水线233
4.11 实例:ARM Cortex-A8和Intel Core i7流水线234
4.11.1 ARM Cortex-A8235
4.11.2 Intel Core i7 920236
4.11.3 Intel Core i7 920的性能238
4.12 运行更快:指令级并行和矩阵乘法240
4.13 高级主题:通过硬件设计语言描述和建模流水线来介绍数字设计以及更多流水线示例242
4.14 谬误与陷阱242
4.15 本章小结243
4.16 历史观点和拓展阅读243
4.17 练习题243
第5章 大容量和高速度:开发存储器层次结构252
5.1 引言252
5.2 存储器技术255
5.2.1 SRAM技术256
5.2.2 DRAM技术256
5.2.3 闪存258
5.2.4 磁盘存储器258
5.3 cache的基本原理259
5.3.1 cache访问261
5.3.2 cache缺失处理265
5.3.3 写操作处理266
5.3.4 一个cache的例子:内置FastMATH处理器267
5.3.5 小结269
5.4 cache性能的评估和改进270
5.4.1 通过更灵活地放置块来减少cache缺失272
5.4.2 在cache中查找一个块275
5.4.3 替换块的选择276
5.4.4 使用多级cache结构减少缺失代价277
5.4.5 通过分块进行软件优化280
5.4.6 小结283
5.5 可信存储器层次283
5.5.1 失效的定义283
5.5.2 纠正一位错、检测两位错的汉明编码(SEC/DED)284
5.6 虚拟机287
5.6.1 虚拟机监视器的必备条件289
5.6.2 指令集系统结构(缺乏)对虚拟机的支持289
5.6.3 保护和指令集系统结构289
5.7 虚拟存储器290
5.7.1 页的存放和查找293
5.7.2 缺页故障294
5.7.3 关于写297
5.7.4 加快地址转换:TLB297
5.7.5 集成虚拟存储器、TLB和cache 300
5.7.6 虚拟存储器中的保护302
5.7.7 处理TLB缺失和缺页303
5.7.8 小结307
5.8 存储器层次结构的一般框架309
5.8.1 问题1:一个块可以被放在何处309
5.8.2 问题2:如何找到一个块310
5.8.3 问题3:当cache缺失时替换哪一块311
5.8.4 问题4:写操作如何处理311
5.8.5 3C:一种理解存储器层次结构行为的直观模型312
5.9 使用有限状态机来控制简单的cache314
5.9.1 一个简单的cache314
5.9.2 有限状态机315
5.9.3 一个简单的cache控制器的有限状态机316
5.10 并行与存储器层次结构:cache一致性317
5.10.1 实现一致性的基本方案318
5.10.2 监听协议319
5.11 并行与存储器层次结构:冗余廉价磁盘阵列320
5.12 高级内容:实现cache控制器320
5.13 实例:ARM Cortex-A8和Intel Core i7的存储器层次结构320
5.14 运行更快:cache分块和矩阵乘法324
5.15 谬误和陷阱326
5.16 本章小结329
5.17 历史观点和拓展阅读329
5.18 练习题329
第6章 从客户端到云的并行处理器340
6.1 引言340
6.2 创建并行处理程序的难点342
6.3 SISD、MIMD、SIMD、SPMD和向量机345
6.3.1 在x86中的SIMD:多媒体扩展346
6.3.2 向量机346
6.3.3 向量与标量的对比347
6.3.4 向量与多媒体扩展的对比348
6.4 硬件多线程350
6.5 多核和其他共享内存多处理器352
6.6 图形处理单元简介355
6.6.1 NVIDIA GPU体系结构简介356
6.6.2 NVIDIA GPU存储结构357
6.6.3 GPU展望358
6.7 集群、仓储级计算机和其他消息传递多处理器360
6.8 多处理器网络拓扑简介363
6.9 与外界通信:集群网络366
6.10 多处理器测试集程序和性能模型366
6.10.1 性能模型368
6.10.2 Roofline模型369
6.10.3 两代Opteron的比较370
6.11 实例:评测Intel Core i7 960和NVIDIA Tesla GPU的Roofline模型373
6.12 运行更快:多处理器和矩阵乘法376
6.13 谬误与陷阱378
6.14 本章小结379
6.15 历史观点和拓展阅读381
6.16 练习题382
附录A 汇编器、链接器和SPIM仿真器389
附录B 逻辑设计基础437
索引494
· · · · · · (收起)
读后感
中国的大学教授时常说中国的学生没有创造力,被高中的教育教傻了。每每听到这些话总感觉十分搞笑 。这些大学教授就从来没有好好想想自己的问题,这个现象的产生自己难道没有责任吗? 读书这么多年,在脑袋里已经形成这样一个概念,专业书只看外国书。中国人编写的书籍,除了少...
为什么新版把 IO 的内容删了。。。其他部分很棒,就是少了IO的内容感觉不太好。 大家感兴趣的话可以看看第三版中相关的内容补充一下,也写得非常好。(难怪学校不用新版的当教材,果然是自作聪明了orz) 总体来说,几乎完美。算是最喜欢的硬件书之一了! 字数补丁字数补丁字数...
作者也是CAAQA的作者, David Patterson, John Hennessy. 这么好的书,大概从19年10月份开始看,2020年必须啃完! 简短的笔记和一些翻译记录记录在语雀,那里的编辑更美观 第4章 Processors 重点讲流水线 第5章 memory hierarchy https://www.yuque.com/baiwfg2/hygwgh/gg9vmv ...
这么好的一本书,国内许多大学却不用,尤其是清华大学,为了自己的面子,非要用自己老师写的书,写的差,学生读不懂,误人子弟! 赞~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!
第四章211页,第二行“必须考虑复制时存储指令后紧跟着的是装载指令的情况”,原文为“ However, consider loads immediately followed by stores, useful when performing memory-to-memory copies in the MIPS architecture. ”,应该翻译为“但是应当考虑到,在MIPS架构中...
用户评价
这本书的语言风格非常吸引我,它不像我之前读过的某些技术书籍那样枯燥乏味,而是充满了智慧和启迪。作者在讲解核心概念时,总能穿插一些有趣的行业发展史和人物故事,这让我在学习知识的同时,也感受到了一份历史的厚重感和人类智慧的光辉。例如,在介绍指令集架构(ISA)时,作者详细回顾了不同指令集的发展历程,以及它们各自的优缺点,这让我明白,即使是看似固定的计算机底层,也经历了一个不断演化和优化的过程。我特别欣赏书中对于性能分析的深入探讨,作者不仅仅是介绍了各种性能指标,更是通过大量的实例分析,教会我如何从硬件层面去思考和解决性能瓶颈问题。我尝试着将书中的一些性能优化技巧应用到我日常的编程实践中,惊喜地发现,即使是微小的改动,在某些场景下也能带来显著的性能提升。这种理论与实践相结合的学习方式,让我觉得这本书不仅仅是一本教材,更是一本能够指导我实际工作的宝典。它让我开始真正地“看见”计算机在执行我的代码时,内部究竟发生了什么,也让我对如何编写更高效、更优化的程序有了全新的认知。
这本书的知识广度和深度都让我惊叹。作者在讲解高级主题时,例如并行计算机的互连网络和高性能计算(HPC)的挑战,都能够将其与前面讲解的基础概念紧密联系起来。我印象特别深刻的是书中关于网络拓扑结构(如网格、环状、树状)的讨论,以及它们在不同并行计算场景下的优劣分析。这让我理解了为什么高性能计算集群的内部网络设计如此关键。此外,书中还对一些前沿的研究方向进行了展望,例如云计算、边缘计算等,这让我对计算机体系结构的未来发展趋势有了初步的了解。我发现,这本书不仅仅是在传授知识,更是在激发我对计算机科学更深入的探索欲望。它让我意识到,计算机领域是一个不断发展和创新的领域,学习永无止境。
这本书的案例分析非常具有启发性。作者在讲解不同指令集架构(如x86、ARM)的演变和设计理念时,不仅仅列举了它们的技术特点,还结合了市场需求和历史背景进行了深入的分析。我印象特别深刻的是书中对RISC(精简指令集计算机)和CISC(复杂指令集计算机)的对比分析,这让我理解了两种设计哲学背后的权衡和取舍。书中还提供了一些实际的硬件设计案例,比如CPU的微架构设计,这让我能够更具体地了解CPU是如何被制造出来的。我尝试着将书中的一些案例分析应用到我对市面上各种电子产品的理解上,比如手机、平板电脑等,这让我能够更好地理解它们在性能和功耗上的差异。这本书让我明白,理解计算机体系结构,不仅仅是学习理论知识,更需要结合实际应用场景进行分析和思考。
这本书让我对存储器系统有了全新的认识。我之前一直认为,存储器就是一个简单的数据仓库,但读完书中的相关章节后,我才意识到存储器系统是一个多么复杂和精妙的工程。从内存的DRAM技术,到缓存的各种策略(直接映射、组相联、全相联),再到虚拟内存和页表,每一个环节都充满了巧妙的设计。我尤其喜欢关于缓存一致性协议的讲解,它让我理解了多核处理器环境下,多个CPU如何协同工作,确保数据的一致性。书中用了很多图示来展示缓存的工作原理,比如写回策略和写通策略,这让我能够直观地理解数据在缓存和主内存之间是如何流转的。我尝试着去回忆我之前遇到的某些内存访问相关的性能问题,现在我能够更有针对性地去分析和定位问题了。这本书让我明白,高效的存储器访问不仅仅是简单地读写数据,更涉及到对硬件特性和算法的深刻理解。
阅读这本书的过程,对我而言更像是一场思维的洗礼。作者在讲解处理器设计时,将复杂的流水线技术、超标量执行等概念,以非常清晰的结构和逻辑进行了阐述。我最初对这些概念感到有些畏惧,但书中的图示和循序渐进的解释,让我能够一步步地理解其精妙之处。尤其是关于乱序执行的讲解,作者通过形象化的比喻,让我理解了CPU如何在不改变最终结果的前提下,优化指令的执行顺序以提高效率。这让我联想到很多生活中的场景,其实很多时候,我们也可以通过调整工作流程来提升效率。书中的章节安排也十分合理,从最基础的二进制到指令集,再到CPU的内部结构,最后延伸到存储器层次结构和I/O系统,整个知识体系脉络清晰,层层递进,让我感觉非常扎实。我尝试着在学习过程中,将书中的概念与我接触过的各种硬件设备联系起来,比如手机的处理器、电脑的主板等,这使得学习内容更加生动有趣,也更加容易内化。这本书让我不再仅仅将计算机视为一个黑盒子,而是能够对其内部的运作机制产生深刻的理解和洞察。
这本书带给我的最大收获,或许是它颠覆了我对“抽象”的认知。在学习操作系统和编译器的部分时,作者非常巧妙地展示了不同抽象层次之间的联系。从硬件的物理实现,到指令集架构,再到高级语言,每一个层次都隐藏了前一层复杂性的细节,并提供了一个更简洁、更易于使用的接口。我印象最深刻的是书中关于编译器前端和后端工作的描述,它让我理解了高级语言是如何一步步被翻译成机器能够执行的指令的,这个过程充满了智慧和创造力。我曾一度认为,编程就是直接与机器对话,但这本书让我认识到,这些抽象层的作用是如此巨大,它们极大地提高了我们的开发效率,让我们能够专注于解决问题本身,而不是纠结于底层的细节。而且,书中还探讨了不同抽象层次之间的权衡,例如,某些指令集为了效率而牺牲了一定的易用性,而另一些则更注重开发者体验。这种对抽象层背后权衡的理解,让我对软件设计和系统架构有了更深的思考。
在学习I/O系统相关的章节时,我被书中的设计思路深深折服。作者在讲解I/O设备如何与CPU交互时,不仅仅介绍了中断和DMA(直接内存访问)这两种主要机制,还详细分析了它们各自的优缺点以及适用场景。我印象特别深刻的是关于DMA的讲解,它让我理解了为什么大数据量的传输任务,如磁盘读写,通常会使用DMA来完成,以减轻CPU的负担。书中还探讨了各种I/O接口的标准,比如USB、PCIe等,以及它们在数据传输速率和功能上的差异。这让我意识到,虽然我们用户通常只看到一个简单的接口,但在其背后,却有着复杂而精密的协议和硬件设计。我尝试着去将书中的概念与我日常使用的各种外设联系起来,比如打印机、网卡等,这使得学习过程更加有趣,也让我对这些设备的运行原理有了更深入的理解。这本书让我明白,高效的I/O处理是构建高性能计算机系统不可或缺的关键环节。
这本书对计算机体系结构的讲解,让我对“并行计算”这个概念有了更深的理解。作者在讲解多处理器系统时,不仅仅介绍了共享内存和分布式内存模型的区别,还深入探讨了多核处理器中的并行处理技术,如SIMD(单指令多数据流)和多线程。我尤其喜欢关于SIMD指令集的讲解,它让我理解了为什么某些计算密集型任务,例如图像处理和科学计算,能够通过利用SIMD指令获得显著的性能提升。书中用了很多形象化的例子,比如同时处理多张图片,来解释SIMD的并行能力。此外,书中还探讨了并行编程中的一些挑战,例如数据竞争和死锁,并介绍了一些常用的并行编程模型和工具。我尝试着去将书中的一些并行计算的思想应用到我的一些项目中,虽然还只是初步的尝试,但已经感受到了并行处理带来的巨大潜力。这本书让我意识到,在现代计算领域,掌握并行处理的思想和技术是至关重要的。
这本书的封面设计着实令人眼前一亮,简约而不失专业感,淡雅的蓝色背景搭配醒目的字体,恰到好处地传递了计算机科学的严谨与深邃。我是一个对计算机底层原理充满好奇的爱好者,虽然之前涉猎过一些相关的基础知识,但始终感觉像隔着一层纱,无法窥探到真正的核心。当我第一次翻开这本书时,就被它清晰的逻辑和循序渐进的讲解深深吸引。作者并没有一开始就抛出过于复杂的概念,而是从最基础的计算机语言——二进制说起,用生动形象的比喻将抽象的逻辑门电路描绘得如同生活中的开关一样易于理解。我尤其喜欢其中关于数字系统表示法的讲解,作者巧妙地运用了多种不同场景下的例子,让我不仅仅是记住了公式,更是理解了数字为何如此表示,以及它在计算机内部是如何运作的。阅读过程中,我发现书中对于数据表示的讨论非常深入,从整数、浮点数的存储方式,到字符编码的演变,每一个细节都处理得恰到好处。这让我对计算机如何处理和存储信息有了更深刻的认识,也明白了为什么有时候看似简单的操作,在底层却需要如此复杂的逻辑。这本书就像一位耐心而博学的老师,一步步引导我探索计算机世界的奥秘,让我对“计算机”这个词汇的理解,从一个笼统的概念,逐渐变得具体而立体。
总的来说,这本书为我打开了一扇通往计算机底层世界的大门。在阅读过程中,我不仅学习到了各种抽象的概念和技术细节,更重要的是,我学会了如何以一种系统性的思维去理解计算机是如何工作的。作者的讲解方式非常高效,他能够将复杂的问题分解成易于理解的部分,并通过大量的图示和实例来帮助读者巩固理解。我感觉自己对计算机的理解,已经从一个“使用者”提升到了一个“思考者”。这本书让我不再仅仅关注应用程序的表面功能,而是开始对底层硬件的性能、效率和设计理念产生浓厚的兴趣。我发现,当我理解了计算机的运作机制后,我能够更好地解决编程中遇到的各种问题,也能更清晰地认识到不同技术之间的联系和区别。这本书的价值,远不止于知识的传授,更在于它能够培养一种深入探究问题的科学态度和能力,这对于任何一个想要在计算机领域有所发展的人来说,都是极其宝贵的。
常见句式:“本节的剩余内容在配套网站上。”
读完啦,做了笔记,思维导图啥的
圣书
反正推荐就完事了
专有名词有解释绝对好评!可以选择性地阅读某些重点。小白可以先看Crash Course的计算机速成课前几节入门。配合陆俊林老师的「计算机组成原理」和极客时间的「深入浅出计算机组成原理」食用更佳!感觉提升最高的还是软件部分,不会傻乎乎地嵌套降低性能。