热门排行
简介
计算机组成与设计:硬件、软件接口(原书第4版) 内容简介:
涵盖从串行计算到并行计算的革命性变革,新增了关于并行化的一章,并且每章中还有一些强调并行硬件和软件主题的小节。新增一个由NVIDIA的首席科学家和架构主管撰写的附录,介绍了现代GPU的出现和重要性,首次详细描述了这个针对可视计算进行了优化的高度并行化、多线程、多核的处理器。描述一种度量多核性能的独特方法——Roofline模型,自带AMDOpteronX4、IntelXeon5000、SunUltraSPARCT2和IBM Cell的基准测试和分析。涵盖一些关于闪存和虚拟机的新内容。提供了大量富有启发性的练习题。将AMDOpteronX4和Inter Nehalem作为贯穿《计算机组成与设计:硬件、软件接口(原书第4版)》的实例。用SPECCPU2006组件更新了所有处理器性能实例。
这本最畅销的计算机组成书籍经过全面更新,关注现今发生在计算机体系结构领域的革命性变革二从单处理器发展到多核微处理器,从串行发展到并行。与前几版一样,《计算机组成与设计:硬件、软件接口(原书第4版)》采用了MIPS处理器来展示计算机硬件技术、汇编语言、计算机算术、流水线、存储器层次结构以及I/O等基本功能。此外,奉书还包括一些关于ARM和x86体系结构的介绍。
作者简介
作者:(美国)帕特森 (David A.Patterson) (美国)亨尼斯 (John L.Hennessy) 译者:康继昌 樊晓桠 安建峰 等
David A.Patterson,加州大学伯克利分校计算机科学系教授,美国国家工程研究院院士,IEEE和ACM会士,曾因成功的启发式教育方法被IEEE授予James H.Muiiigan.Jr教育奖章。他因为对RISC技术的贡献而荣获1995年IEEE技术成就奖,而在RAID技术方面的成就为他赢得了1999年IEEE。Reynold Johnson信息存储奖。2000年他和John L.Hennessy分享了Johnvon Neumann奖。
John L.Hennessy斯坦福大学接长。IEEE和ACM会士,美国国家工程研究院院士及美国科学艺术研究院院士。Hennessy教授因为在RISC技术方面做出了突出贡献而荣获2001年的Eckert-Mauchly奖章,他也是2001年Seymour Cray计算机工程奖得主,并且和David A.Pafferson分享了2000年Johnvon Neumann奖。
计算机组成与设计:硬件、软件接口(原书第4版) 目录:
出版者的话
译者序
前言
第1章 计算机概要与技术
1.1 引言
1.1.1 计算应用的分类及其特性
1.1.2 你能从本书学到什么
1.2 程序概念入门
1.3 硬件概念入门
1.3.1 剖析鼠标
1.3.2 显示器
1.3.3 打开机箱
1.3.4 数据安全
1.3.5 与其他计算机通信
1.3.6 处理器和存储器制造技术
1.4 性能
1.4.1 性能的定义
1.4.2 性能的测量
1.4.3 CPU性能及其因素
1.4.4 指令的性能
1.4.5 经典的CPU性能公式
1.5 功耗墙
1.6 沧海巨变:从单处理器向多处理器转变
1.7 实例:制造以及AMD Opteron X4基准
1.7.1 SPEC CPU基准测试程序
1.7.2 SPEC功耗基准测试程序
1.8 谬误与陷阱
1.9 本章小结
1.10 拓展阅读
1.11 练习题
第2章 指令:计算机的语言
2.1 引言
2.2 计算机硬件的操作
2.3 计算机硬件的操作数
2.3.1 存储器操作数
2.3.2 常数或立即数操作数
2.4 有符号和无符号数
2.5 计算机中指令的表示
2.6 逻辑操作
2.7 决策指令
2.7.1 循环
2.7.2 case/switch语句
2.8 计算机硬件对过程的支持
2.8.1 使用更多的寄存器
2.8.2 嵌套过程
2.8.3 在栈中为新数据分配空间
2.8.4 在堆中为新数据分配空间
2.9 人机交互
2.10 MIPS中32位立即数和地址的寻址
2.10.1 32位立即数
2.10.2 分支和跳转中的寻址
2.10.3 MIPS寻址模式总结
2.10.4 机器语言解码
2.11 并行与指令:同步
2.12 翻译并执行程序
2.12.1 编译器
2.12.2 汇编器
2.12.3 链接器
2.12.4 加载器
2.12.5 动态链接库
2.12.6 启动一个Java程序
2.13 以一个C排序程序为例
2.13.1 swap过程
2.13.2 sort过程
2.14 数组与指针
2.14.1 用数组实现clear
2.14.2 用指针实现clear
2.14.3 比较两个版本的clear
2.15 高级内容:编译C语言和解释Java语言
2.16 实例:ARM指令集
2.16.1 寻址模式
2.16.2 比较和条件分支
2.16.3 ARM的特色
2.17 实例:x86指令集
2.17.1 Intel x86的改进
2.17.2 x86寄存器和数据寻址模式
2.17.3 x86整数操作
2.17.4 x86指令编码
2.17.5 x86总结
2.18 谬误与陷阱
2.19 本章小结
2.20 拓展阅读
2.21 练习题
第3章 计算机的算术运算
3.1 引言
3.2 加法和减法
3.2.1 多媒体算术运算
3.2.2 小结
3.3 乘法
3.3.1 顺序的乘法算法和硬件
3.3.2 有符号乘法
3.3.3 更快速的乘法
3.3.4 MIPS中的乘法
3.3.5 小结
3.4 除法
3.4.1 除法算法及其硬件结构
3.4.2 有符号除法
3.4.3 更快速的除法
3.4.4 MIPS中的除法
3.4.5 小结
3.5 浮点运算
3.5.1 浮点表示
3.5.2 浮点加法
3.5.3 浮点乘法
3.5.4 MIPS中的浮点指令
3.5.5 算术精确性
3.5.6 小结
3.6 并行性和计算机算术:结合律
3.7 实例:x86的浮点
3.7.1 x86浮点体系结构
3.7.2 Intel SIMD流扩展2(SSE2)浮点体系结构
3.8 谬误与陷阱
3.9 本章小结
3.10 拓展阅读
3.11 练习题
第4章 处理器
4.1 引言
4.1.1 一个基本的MIPS实现
4.1.2 实现方式概述
4.2 逻辑设计惯例
4.3 建立数据通路
4.4 一个简单的实现机制
4.4.1 ALU控制
4.4.2 主控制单元的设计
4.4.3 数据通路的操作
4.4.4 控制的结束
4.4.5 为什么不使用单周期实现方式
4.5 流水线概述
4.5.1 面向流水线的指令集设计
4.5.2 流水线冒险
4.5.3 对流水线概述的小结
4.6 流水线数据通路及其控制
4.6.1 图形化表示的流水线
4.6.2 流水线控制
4.7 数据冒险:转发与阻塞
4.8 控制冒险
4.8.1 假定分支不发生
4.8.2 缩短分支的延迟
4.8.3 动态分支预测
4.8.4 流水线小结
4.9 异常
4.9.1 异常在MIPS体系结构中的处理
4.9.2 在流水线实现中的异常
4.10 并行和高级指令级并行
4.10.1 推测的概念
4.10.2 静态多发射处理器
4.10.3 动态多发射处理器
4.11 实例:AMD Opteron X4(Barcelona)流水线
4.12 高级主题:通过硬件设计语言描述和建模流水线来介绍数字设计以及更多流水线示例
4.13 谬误与陷阱
4.14 本章小结
4.15 拓展阅读
4.16 练习题
第5章 大容量和高速度:开发存储器层次结构
5.1 引言
5.2 cache的基本原理
5.2.1 cache访问
5.2.2 cache缺失处理
5.2.3 写操作处理
5.2.4 一个cache的例子:内置FastMATH处理器
5.2.5 设计支持cache的存储系统
5.2.6 小结
5.3 cache性能的评估和改进
5.3.1 通过更灵活地放置块来减少cache缺失
5.3.2 在cache中查找一个块
5.3.3 替换块的选择
5.3.4 使用多级cache结构减少缺失代价
5.3.5 小结
5.4 虚拟存储器
5.4.1 页的存放和查找
5.4.2 缺页
5.4.3 关于写
5.4.4 加快地址转换:TLB
5.4.5 集成虚拟存储器、TLB和cache
5.4.6 虚拟存储器中的保护
5.4.7 处理TLB缺失和缺页
5.4.8 小结
5.5 存储器层次结构的一般架构
5.5.1 问题1:一个块可以被放在何处
5.5.2 问题2:如何找到一个块
5.5.3 问题3:当cache缺失时替换哪一块
5.5.4 问题4:写操作如何处理
5.5.5 3C:一种理解存储器层次结构行为的直观模型
5.6 虚拟机
5.6.1 虚拟机监视器的必备条件
5.6.2 指令集系统结构(缺乏)对虚拟机的支持
5.6.3 保护和指令集系统结构
5.7 使用有限状态机来控制简单的cache
5.7.1 一个简单的cache
5.7.2 有限状态机
5.7.3 一个简单的cache控制器的有限状态机
5.8 并行与存储器层次结构:cache一致性
5.8.1 实现一致性的基本方案
5.8.2 监听协议
5.9 高级内容:实现cache控制器
5.10 实例:AMD Opteron X4(Barcelona)和Intel Nehalem的存储器层次结构
5.10.1 Nehalem和Opteron的存储器层次结构
5.10.2 减少缺失代价的技术
5.11 谬误和陷阱
5.12 本章小结
5.13 拓展阅读
5.14 练习题
第6章 存储器和其他I/O主题
6.1 引言
6.2 可信度、可靠性和可用性
6.3 磁盘存储器
6.4 快闪式存储器
6.5 连接处理器、内存以及I/O设备
6.5.1 互联基础
6.5.2 x86处理器的I/O互联
6.6 为处理器、内存和操作系统提供I/O设备接口
6.6.1 给I/O设备发送指令
6.6.2 与处理器通信
6.6.3 中断优先级
6.6.4 在设备与内存之间传输数据
6.6.5 直接存储器访问和内存系统
6.7 I/O性能度量:磁盘和文件系统的例子
6.7.1 事务处理I/O基准程序
6.7.2 文件系统和Web I/O的基准程序
6.8 设计I/O系统
6.9 并行性与I/O:廉价磁盘冗余阵列
6.9.1 无冗余(RAID 0)
6.9.2 镜像(RAID 1)
6.9.3 错误检测和纠错码(RAID 2)
6.9.4 位交叉奇偶校验(RAID 3)
6.9.5 块交叉奇偶校验(RAID 4)
6.9.6 分布式块交叉奇偶校验(RAID 5)
6.9.7 P+Q冗余(RAID 6)
6.9.8 RAID小结
6.10 实例:Sun Fire x4150服务器
6.11 高级主题:网络
6.12 谬误与陷阱
6.13 本章小结
6.14 拓展阅读
6.15 练习题
第7章 多核、多处理器和集群
7.1 引言
7.2 创建并行处理程序的难点
7.3 共享存储多处理器
7.4 集群和其他消息传递多处理器
7.5 硬件多线程
7.6 SISD、MIMD、SIMD、SPMD和向量机
7.6.1 在x86中的SIMD:多媒体扩展
7.6.2 向量机
7.6.3 向量与标量的对比
7.6.4 向量与多媒体扩展的对比
7.7 图形处理单元简介
7.7.1 NVIDIA GPU体系结构简介
7.7.2 深入理解GPU
7.8 多处理器网络拓扑简介
7.9 多处理器基准测试程序
7.10 Roofline:一个简单的性能模型
7.10.1 Roofline模型
7.10.2 两代Opteron的比较
7.11 实例:使用屋顶线模型评估四种多核处理器
7.11.1 4个多核系统
7.11.2 稀疏矩阵
7.11.3 结构化网格
7.11.4 生产率
7.12 谬误与陷阱
7.13 本章小结
7.14 拓展阅读
7.15 练习题
附录A 图形和计算GPU
A.1 引言
A.1.1 GPU发展简史
A.1.2 异构系统
A.1.3 GPU发展成了可扩展的并行处理器
A.1.4 为什么使用CUDA和GPU计算
A.1.5 GPU统一了图形和计算
A.1.6 GPU可视化计算的应用
A.2 GPU系统架构
A.2.1 异构CPU-GPU系统架构
A.2.2 GPU接口和驱动
A.2.3 图形逻辑流水线
A.2.4 将图形流水线映射到统一的GPU处理器
A.2.5 基本的统一GPU结构
A.3 可编程GPU
A.3.1 为实时图形编程
A.3.2 逻辑图形流水线
A.3.3 图形渲染程序
A.3.4 像素渲染示例
A.3.5 并行计算应用编程
A.3.6 使用CUDA进行可扩展并行编程
A.3.7 一些限制
A.3.8 体系结构隐含的问题
A.4 多线程的多处理器架构
A.4.1 大规模多线程
A.4.2 多处理器体系结构
A.4.3 单指令多线程(SIMT)
A.4.4 SIMT warp执行和分支
A.4.5 管理线程和线程块
A.4.6 线程指令
A.4.7 指令集架构(ISA)
A.4.8 流处理器(SP)
A.4.9 特殊功能单元(SFU)
A.4.10 与其他多处理器的比较
A.4.11 多线程多处理器总结
A.5 并行存储系统
A.5.1 DRAM的考虑
A.5.2 cache
A.5.3 MMU
A.5.4 存储器空间
A.5.5 全局存储器
A.5.6 共享存储器
A.5.7 局部存储器
A.5.8 常量存储器
A.5.9 纹理存储器
A.5.10 表面
A.5.11 load/store访问
A.5.12 ROP
A.6 浮点算术
A.6.1 支持的格式
A.6.2 基本算术
A.6.3 专用算术
A.6.4 性能
A.6.5 双精度
A.7 资料:NVIDIA GeForce 8800
A.7.1 流处理器阵列(SPA)
A.7.2 纹理/处理器簇(TPC)
A.7.3 流多处理器(SM)
A.7.4 指令集
A.7.5 流处理器(SP)
A.7.6 特殊功能单元(SFU)
A.7.7 光栅化
A.7.8 光栅操作处理器(ROP)和存储系统
A.7.9 可扩展性
A.7.10 性能
A.7.11 密集线性代数性能
A.7.12 FFT性能
A.7.13 排序性能
A.8 资料:将应用映射到GPU
A.8.1 稀疏矩阵
A.8.2 在共享存储器中进行缓存
A.8.3 扫描和归约
A.8.4 基数排序
A.8.5 GPU上的N-Body应用
A.9 谬误与陷阱
A.10 小结
A.11 拓展阅读
附录B 汇编器、链接器和SPIM仿真器
B.1 引言
B.1.1 什么时候使用汇编语言
B.1.2 汇编语言的缺点
B.2 汇编器
B.2.1 目标文件的格式
B.2.2 附加工具
B.3 链接器
B.4 加载
B.5 内存的使用
B.6 过程调用规范
B.6.1 过程调用
B.6.2 过程调用举例
B.6.3 另外一个过程调用的例子
B.7 异常和中断
B.8 输入和输出
B.9 SPIM
B.10 MIPS R2000汇编语言
B.10.1 寻址方式
B.10.2 汇编语法
B.10.3 MIPS指令编码
B.10.4 指令格式
B.10.5 常数操作指令
B.10.6 比较指令
B.10.7 分支指令
B.10.8 跳转指令
B.10.9 陷阱指令
B.10.10 取数指令
B.10.11 保存指令
B.10.12 数据传送指令
B.10.13 浮点运算指令
B.10.14 异常和中断指令
B.11 小结
B.12 参考文献
B.13 练习题