目 录
第1章 量化设计与分析基础 1
1.1 引言 2
1.2 计算机的分类 4
1.2.1 个人移动设备 5
1.2.2 桌面计算 5
1.2.3 服务器 6
1.2.4 集群/仓库级计算机 6
1.2.5 嵌入式计算机 7
1.2.6 并行度与并行体系结构的分类 7
1.3 计算机体系结构的定义 8
1.3.1 指令集体系结构:计算机体系结构的近距离审视 9
1.3.2 真正的计算机体系结构:设计满足目标和功能需求的组成和硬件 12
1.4 技术趋势 13
1.4.1 性能趋势:带宽胜过延迟 15
1.4.2 晶体管性能与连线的发展 17
1.5 集成电路中的功率和能耗趋势 17
1.5.1 功率和能耗:系统观点 17
1.5.2 微处理器内部的能耗和功率 18
1.6 成本趋势 21
1.6.1 时间、产量和大众化的影响 21
1.6.2 集成电路的成本 22
1.6.3 成本与价格 26
1.6.4 制造成本与运行成本 26
1.7 可信任度 26
1.8 性能的测量、报告和汇总 28
1.8.1 基准测试 29
1.8.2 报告性能测试结果 32
1.8.3 性能结果汇总 33
1.9 计算机设计的量化原理 34
1.9.1 充分利用并行 35
1.9.2 局域性原理 35
1.9.3 重点关注常见情形 35
1.9.4 Amdahl定律 36
1.9.5 处理器性能公式 38
1.10 融会贯通:性能、价格和功耗 40
1.11 谬论与易犯错误 42
1.12 结语 46
1.13 历史回顾与参考文献 47
第2章 存储器层次结构设计 53
2.1 引言 54
2.2 缓存性能的10种高级优化方法 59
2.2.1 第一种优化:小而简单的第一级缓存,用以缩短命中时间、降低功率 59
2.2.2 第二种优化:采用路预测以缩短命中时间 61
2.2.3 第三种优化:实现缓存访问的流水化,以提高缓存带宽 61
2.2.4 第四种优化:采用无阻塞缓存,以提高缓存带宽 62
2.2.5 第五种优化:采用多种缓存以提高缓存带宽 64
2.2.6 第六种优化:关键字优先和提前重启动以降低缺失代价 64
2.2.7 第七种优化:合并写缓冲区以降低缺失代价 65
2.2.8 第八种优化:采用编译器优化以降低缺失率 66
2.2.9 第九种优化:对指令和数据进行硬件预取,以降低缺失代价或缺失率 68
2.2.10 第十种优化:用编译器控制预取,以降低缺失代价或缺失率 69
2.2.11 缓存优化小结 72
2.3 存储器技术与优化 72
2.3.1 SRAM技术 73
2.3.2 DRAM技术 73
2.3.3 提高DRAM芯片内部的存储器性能 75
2.3.4 降低SDRAM中的功耗 77
2.3.5 闪存 77
2.3.6 提高存储器系统的可靠性 78
2.4 保护:虚拟存储器和虚拟机 79
2.4.1 通过虚拟存储器提供保护 79
2.4.2 通过虚拟机提供保护 81
2.4.3 对虚拟机监视器的要求 82
2.4.4 虚拟机(缺少)的指令集体系结构支持 82
2.4.5 虚拟机对虚拟存储器和I/O的影响 83
2.4.6 VMM实例:Xen虚拟机 84
2.5 交叉问题:存储器层次结构的设计 84
2.5.1 保护和指令集体系结构 84
2.5.2 缓存数据的一致性 85
2.6 融会贯通:ARM Cortex-A8和Intel Core i7中的存储器层次结构 85
2.6.1 ARM Cortex-A8 86
2.6.2 Intel Core i7 89
2.7 谬论与易犯错误 95
2.8 结语:展望 98
2.9 历史回顾与参考文献 99
第3章 指令级并行及其开发 109
3.1 指令级并行:概念与挑战 110
3.1.1 什么是指令级并行 111
3.1.2 数据相关与冒险 111
3.1.3 控制相关 114
3.2 揭示ILP的基本编译器技术 116
3.2.1 基本流水线调度和循环展开 116
3.2.2 循环展开与调度小结 119
3.3 用高级分支预测降低分支成本 120
3.3.1 竞赛预测器:局部预测器与全局预测器的自适应联合 122
3.3.2 Intel Core i7分支预测器 123
3.4 用动态调度克服数据冒险 124
3.4.1 动态调度:思想 124
3.4.2 使用Tomasulo算法进行动态调度 126
3.5 动态调度:示例和算法 130
3.5.1 Tomasulo算法:细节 132
3.5.2 Tomasulo算法:基于循环的示例 133
3.6 基于硬件的推测 135
3.7 以多发射和静态调度来开发ILP 143
3.8 以动态调度、多发射和推测来开发ILP 146
3.9 用于指令传送和推测的高级技术 150
3.9.1 提高指令提取带宽 150
3.9.2 推测:实现问题与扩展 155
3.10 ILP局限性的研究 158
3.10.1 硬件模型 158
3.10.2 可实现处理器上ILP的局限性 160
3.10.3 超越本研究的局限 163
3.11 交叉问题:ILP方法与存储器系统 164
3.11.1 硬件推测与软件推测 164
3.11.2 推测执行与存储器系统 165
3.12 多线程:开发线程级并行提高单处理器吞吐量 165
3.12.1 细粒度多线程在Sun T1上的效果 168
3.12.2 同时多线程在超标量处理器上的效果 170
3.13 融会贯通:Intel Core i7和ARMCortex-A8 173
3.13.1 ARM Cortex-A8 173
3.13.2 Intel Core i7 176
3.14 谬论与易犯错误 179
3.15 结语:前路何方 182
3.16 历史回顾与参考文献 183
第4章 向量、SIMD和GPU体系结构中的数据级并行 193
4.1 引言 194
4.2 向量体系结构 195
4.2.1 VMIPS 196
4.2.2 向量处理器如何工作:一个示例 198
4.2.3 向量执行时间 199
4.2.4 多条车道:每个时钟周期超过一个元素 201
4.2.5 向量长度寄存器:处理不等于64的循环 203
4.2.6 向量遮罩寄存器:处理向量循环中的IF语句 204
4.2.7 内存组:为向量载入/存储单元提供带宽 205
4.2.8 步幅:处理向量体系结构中的多维数组 206
4.2.9 集中—分散:在向量体系结构中处理稀疏矩阵 207
4.2.10 向量体系结构编程 208
4.3 SIMD指令集多媒体扩展 209
4.3.1 多媒体SIMD体系结构编程 212
4.3.2 Roofline可视性能模型 212
4.4 图形处理器 214
4.4.1 GPU编程 214
4.4.2 NVIDIA GPU计算结构 216
4.4.3 NVIDA GPU指令集体系结构 222
4.4.4 GPU中的条件分支 224
4.4.5 NVIDIA GPU存储器结构 226
4.4.6 Fermi GPU体系结构中的创新 228
4.4.7 向量体系结构与GPU的相似与不同 230
4.4.8 多媒体SIMD计算机与GPU之间的相似与不同 233
4.4.9 小结 233
4.5 检测与增强循环强并行 235
4.5.1 查找相关 238
4.5.2 消除相关计算 240
4.6 交叉问题 240
4.6.1 能耗与DLP:慢而宽与快而窄 240
4.6.2 分组存储器和图形存储器 241
4.6.3 步幅访问和TLB缺失 241
4.7 融会贯通:移动与服务器GPU、Tesla与Core i7 241
4.8 谬论与易犯错误 247
4.9 结语 248
4.10 历史回顾与参考文献 250
第5章 线程级并行 256
5.1 引言 257
5.1.1 多处理器体系结构:问题与方法 258
5.1.2 并行处理的挑战 260
5.2 集中式共享存储器体系结构 262
5.2.1 什么是多处理器缓存一致性 263
5.2.2 一致性的基本实现方案 264
5.2.3 监听一致性协议 265
5.2.4 基本实现技术 265
5.2.5 示例协议 267
5.2.6 基本一致性协议的扩展 270
5.2.7 对称共享存储器多处理器与监听协议的局限性 271
5.2.8 实施监听缓存一致性 272
5.3 对称共享存储器多处理器的性能 273
5.3.1 商业工作负载 274
5.3.2 商业工作负载的性能测量 275
5.3.3 多重编程和操作系统工作负载 279
5.3.4 多重编程和操作系统工作负载的性能 280
5.4 分布式共享存储器和目录式一致性 282
5.4.1 目录式缓存一致性协议:基础知识 283
5.4.2 目录式协议举例 285
5.5 同步:基础知识 288
5.5.1 基本硬件原语 288
5.5.2 使用一致性实现锁 289
5.6 存储器连贯性模型:简介 291
5.6.1 程序员的观点 292
5.6.2 宽松连贯性模型:基础知识 293
5.6.3 关于连贯性模型的最后说明 293
5.7 交叉问题 294
5.7.1 编译器优化与连贯性模型 294
5.7.2 利用推测来隐藏严格连贯性模型中的延迟 294
5.7.3 包含性及其实现 295
5.7.4 利用多重处理和多线程的性能增益 295
5.8 融会贯通:多核处理器及其性能 297
5.9 谬论与易犯错误 301
5.10 结语 304
5.11 历史回顾与参考文献 306
第6章 以仓库级计算机开发请求级、数据级并行 319
6.1 引言 320
6.2 仓库级计算机的编程模型与工作负载 323
6.3 仓库级计算机的计算机体系结构 327
6.3.1 存储 328
6.3.2 阵列交换机 328
6.3.3 WSC存储器层次结构 329
6.4 仓库级计算机的物理基础设施与成本 331
6.4.1 测量WSC的效率 334
6.4.2 WSC的成本 335
6.5 云计算:公用计算的回报 338
6.6 交叉问题 342
6.6.1 成为瓶颈的WSC网络 342
6.6.2 在服务器内部高效利用能量 343
6.7 融会贯通:Google仓库级计算机 344
6.7.1 集装箱 344
6.7.2 Google WSC中的冷却与供电 346
6.7.3 Google WSC中的服务器 348
6.7.4 Google WSC中的联网 348
6.7.5 Google WSC的监控与修复 349
6.7.6 小结 349
6.8 谬论与易犯错误 350
6.9 结语 353
6.10 历史回顾与参考文献 354
附录A 指令集基本原理 365
A.1 引言 366
A.2 指令集体系结构的分类 366
A.3 存储器寻址 369
A.4 操作数的类型与大小 374
A.5 指令集中的操作 375
A.6 控制流指令 376
A.7 指令集编码 380
A.8 交叉问题:编译器的角色 382
A.9 融会贯通:MIPS体系结构 388
A.10 谬论和易犯错误 396
A.11 结语 399
A.12 历史回顾与参考文献 400
附录B 存储器层次结构回顾 405
B.1 引言 406
B.2 缓存性能 416
B.3 6种基本的缓存优化 421
B.4 虚拟存储器 435
B.5 虚拟存储器的保护与示例 441
B.6 谬论与易犯错误 447
B.7 结语 448
B.8 历史回顾与参考文献 449
附录C 流水线:基础与中级概念 454
C.1 引言 455
C.2 流水化的主要阻碍——流水线冒险 461
C.3 如何实现流水化 476
C.4 妨碍流水线实现的难题 485
C.5 扩展MIPS流水线,以处理多周期操作 490
C.6 融会贯通:MIPS R4000流水线 498
C.7 交叉问题 504
C.8 谬论与易犯错误 511
C.9 结语 512
C.10 历史回顾与参考文献 512
参考文献 518
索引 543
· · · · · · (
收起)