目录
出版者的话
赞誉
译者序
前言
第1章 总述1
1.1 什么是计算机体系结构2
1.2 并行体系结构的基本组成3
1.2.1 处理器4
1.2.2 存储6
1.2.3 互连9
1.3 并行体系结构10
1.3.1 指令级并行10
1.3.2 线程级并行10
1.3.3 向量和阵列处理器11
1.4 性能12
1.4.1 基准测试集13
1.4.2 Amdahl定律15
1.5 技术挑战19
1.5.1 功耗和能量19
1.5.2 可靠性19
1.5.3 连线延迟20
1.5.4 设计复杂度20
1.5.5 尺寸缩小极限和CMOS终点21
习题22
第2章 工艺及其影响25
2.1 概述25
2.2 电学基本定律26
2.2.1 欧姆定律26
2.2.2 电阻26
2.2.3 电容27
2.3 MOSFET晶体管和CMOS反相器27
2.4 工艺变更30
2.5 功耗和能耗31
2.5.1 动态功耗31
2.5.2 静态功耗35
2.5.3 功耗和能量指标37
2.6 可靠性38
2.6.1 故障和错误38
2.6.2 可靠性指标39
2.6.3 故障率和老化40
2.6.4 瞬时故障42
2.6.5 间歇性故障44
2.6.6 永久性故障48
2.6.7 工艺偏差及其对故障的影响48
习题49
第3章 处理器微结构51
3.1 概述51
3.2 指令集架构52
3.2.1 指令类型和操作码53
3.2.2 指令混合55
3.2.3 指令操作数55
3.2.4 异常、陷阱和中断58
3.2.5 存储一致性模型60
3.2.6 本书的核心ISA60
3.2.7 CISC和RISC61
3.3 静态调度流水线63
3.3.1 经典五级流水线64
3.3.2 指令乱序完成69
3.3.3 超流水和超标量CPU72
3.3.4 分支预测73
3.3.5 静态指令调度73
3.3.6 静态流水线的优缺点77
3.4 动态调度流水线78
3.4.1 解决数据相关:Tomasulo算法79
3.4.2 推测执行82
3.4.3 动态分支预测83
3.4.4 支持推测的Tomasulo算法87
3.4.5 动态内存歧义消除89
3.4.6 显式寄存器重命名91
3.4.7 指令发射后的寄存器读取93
3.4.8 推测指令调度94
3.4.9 打破数据流限制:值预测97
3.4.10 单周期多指令98
3.4.11 处理复杂ISA98
3.5 超长指令字微结构99
3.5.1 动态和静态技术100
3.5.2 VLIW体系结构100
3.5.3 循环展开102
3.5.4 软件流水103
3.5.5 非循环VLIW调度108
3.5.6 谓词指令109
3.5.7 推测内存歧义消除110
3.5.8 异常110
3.6 EPIC微结构112
3.7 向量微结构113
3.7.1 算术/逻辑向量指令113
3.7.2 内存向量指令114
3.7.3 向量分段开采和链接115
3.7.4 条件语句116
3.7.5 scatter和gather操作117
习题118
第4章 存储层次136
4.1 概述136
4.2 金字塔形存储层次137
4.2.1 访存局部性138
4.2.2 存储层次中的一致性138
4.2.3 存储包含139
4.3 cache层次139
4.3.1 cache映射及组织方式139
4.3.2 替换策略142
4.3.3 写策略143
4.3.4 cache层次的性能144
4.3.5 cache失效的分类145
4.3.6 非阻塞cache145
4.3.7 cache预取和预加载147
4.4 虚拟存储149
4.4.1 引入虚存的动机149
4.4.2 从操作系统视角看到的虚拟存储149
4.4.3 虚地址转换151
4.4.4 访存控制151
4.4.5 多级页表152
4.4.6 反向页表153
4.4.7 旁路转换缓冲153
4.4.8 带物理标识的虚地址cache154
4.4.9 带虚标识的虚地址cache157
习题157
第5章 多处理器系统162
5.1 概述162
5.2 并行编程模型163
5.2.1 共享内存系统164
5.2.2 消息传递系统166
5.3 基于消息传递的多处理器系统167
5.3.1 消息传递原语167
5.3.2 消息传递协议169
5.3.3 消息传递协议的硬件支持170
5.4 基于总线的共享内存系统171
5.4.1 多处理器cache组织172
5.4.2 一个简单的侦听cache协议173
5.4.3 侦听cache协议的设计空间176
5.4.4 协议变种181
5.4.5 多阶段侦听cache协议的设计问题184
5.4.6 通信事件的分类188
5.4.7 TLB一致性190
5.5 可扩展共享内存系统192
5.5.1 目录协议的基本概念和术语193
5.5.2 目录协议实现方法193
5.5.3 目录协议的扩展性197
5.5.4 层次化系统200
5.5.5 页面迁移和复制201
5.6 全cache共享内存系统204
5.6.1 基本概念、硬件结构和协议204
5.6.2 平坦COMA206
习题207
第6章 互连网络214
6.1 概述214
6.2 互连网络的设计空间215
6.2.1 设计概念综述215
6.2.2 延迟和带宽模型217
6.3 交换策略221
6.4 拓扑结构223
6.4.1 间接网络223
6.4.2 直接网络226
6.5 路由技术229
6.5.1 路由算法229
6.5.2 死锁避免和确定性路由231
6.5.3 放松路由限制:虚通道和转弯模型232
6.5.4 进一步放松的路由算法:自适应路由233
6.6 交换架构234
习题236
第7章 一致性、同步与存储一致性238
7.1 概述238
7.2 背景239
7.2.1 共享内存通信模型239
7.2.2 硬件组件241
7.3 一致性和store原子性244
7.3.1 多处理器一致性的实现困难244
7.3.2 cache协议246
7.3.3 store原子性249
7.3.4 纯一致性254
7.3.5 store原子性和访存交错262
7.4 顺序一致性262
7.4.1 顺序一致性的形式化模型263
7.4.2 顺序一致性的访存顺序规则265
7.4.3 入站消息管理266
7.4.4 store同步性270
7.5 同步272
7.5.1 基本同步原语273
7.5.2 基于硬件的同步276
7.5.3 基于软件的同步276
7.6 放松的存储一致性模型279
7.6.1 不依赖于同步的放松模型280
7.6.2 依赖同步的放松模型285
7.7 推测执行中的存储序违反289
7.7.1 乱序执行处理器中的保守存储模型289
7.7.2 推测执行中的存储序违反290
习题292
第8章 片上多处理器299
8.1 概述299
8.2 CMP的基本原理300
8.2.1 技术趋势300
8.2.2 机遇301
8.3 核内多线程302
8.3.1 软件支持的多线程302
8.3.2 硬件支持的多线程303
8.3.3 块式(粗粒度)多线程304
8.3.4 交错(细粒度)多线程308
8.3.5 乱序执行处理器上的同时多线程311
8.4 片上多处理器架构314
8.4.1 同构CMP架构315
8.4.2 基于异构处理器核的CMP系统320
8.4.3 连体处理器核322
8.5 编程模型323
8.5.1 独立进程324
8.5.2 显式线程并行324
8.5.3 事务内存326
8.5.4 线程级推测执行333
8.5.5 帮助线程337
8.5.6 通过冗余执行提高可靠性338
习题340
第9章 量化评估343
9.1 概述343
9.2 模拟器分类344
9.2.1 用户级模拟器和全系统模拟器344
9.2.2 功能模拟器和时钟精确模拟器345
9.2.3 trace驱动模拟器、执行驱动模拟器和直接执行模拟器347
9.3 模拟器的集成350
9.3.1 功能优先模拟器的集成350
9.3.2 时序优先模拟器的集成351
9.4 多处理器模拟器352
9.4.1 串行多处理器模拟器352
9.4.2 并行多处理器模拟器353
9.5 功耗和热量模拟357
9.6 工作负载采样359
9.6.1 基于采样的微架构模拟360
9.6.2 SimPoint361
9.7 工作负载特征刻画361
9.7.1 理解性能瓶颈362
9.7.2 合成基准测试程序362
9.7.3 预测工作负载行为362
习题363
· · · · · · (
收起)