高性能计算:现代系统与应用实践 / 高性能计算技术丛书
定价:¥149.00
作者: [美]托马斯·斯特林,马修·安德森著;黄智濒,艾邦成等译
出版时间:2020-05-07
出版社:机械工业出版社
- 机械工业出版社
- 9787111645795
- 1-4
- 47229644-1
- 16开
- 2020-05-07
- 891
- 计算机通信类
- 本科
内容简介
本书内容全面且易学易懂,不仅涵盖高性能计算的基础概念和知识点,同时重视核心技能的培养。通过阅读本书:研究者将学习如何将超级计算机作为寻求新知识的重要工具;新手工程师将体验超级计算机如何运用高性能计算系统和方法来设计和模拟创新产品;学生将会了解未来高性能计算研究和开发的可能方向,为职业生涯做好准备;商用集群的维护和管理者将在掌握高性能计算系统的功能的基础上,学习如何更好地使用它们。
目录
译者序
序言
前言
致谢
第1章 绪论 1
1.1 高性能计算学科 2
1.1.1 定义 3
1.1.2 应用程序 3
1.1.3 性能和指标 3
1.1.4 高性能计算系统 4
1.1.5 超算问题 6
1.1.6 应用编程 7
1.2 超算对科学、社会和安全的影响 8
1.2.1 促进欺诈检测和市场数据分析 8
1.2.2 发现、管理和分配石油和天然气 8
1.2.3 加快制造业的创新 9
1.2.4 个性化医药和药物发现 9
1.2.5 预测自然灾害和了解气候变化 10
1.3 超级计算机剖析 11
1.4 计算机性能 13
1.4.1 性能 13
1.4.2 峰值性能 13
1.4.3 持续性能 14
1.4.4 可扩展性 15
1.4.5 性能退化 15
1.4.6 性能提升 17
1.5 超级计算机简史 17
1.5.1 第一个阶段—利用机械技术的自动计算机 18
1.5.2 第二个阶段—真空管时代的冯·诺依曼架构 19
1.5.3 第三个阶段—指令级并行 23
1.5.4 第四个阶段—向量处理和积分 24
1.5.5 第五个阶段—单指令多数据阵列 27
1.5.6 第六个阶段—顺序处理器的通信和超大规模集成电路 27
1.5.7 第七个阶段—多核和千万亿次 30
1.5.8 新数字时代和超越摩尔定律 30
1.6 作为学生的指南和工具 31
1.7 本章小结及成果 32
1.8 练习 33
参考文献 34
第2章 HPC架构:系统和技术 35
2.1 引言 35
2.2 HPC架构的关键特性 36
2.2.1 速度 36
2.2.2 并行性 36
2.2.3 效率 37
2.2.4 功率 37
2.2.5 可靠性 38
2.2.6 可编程性 38
2.3 并行架构家族—弗林分类法 39
2.4 支持技术 41
2.4.1 技术阶段 41
2.4.2 技术的角色 44
2.4.3 数字逻辑 45
2.4.4 存储技术 47
2.5 冯·诺依曼顺序处理器 50
2.6 向量和流水线 52
2.6.1 流水线并行 53
2.6.2 向量处理 55
2.7 单指令多数据阵列 56
2.7.1 单指令多数据架构 56
2.7.2 阿姆达定律 57
2.8 多处理器 59
2.8.1 共享内存多处理器 60
2.8.2 大规模并行处理器 62
2.8.3 商品集群系统 62
2.9 异构计算机结构 63
2.10 本章小结及成果 64
2.11 练习 65
参考文献 67
第3章 商品集群 68
3.1 引言 68
3.1.1 商品集群的定义 68
3.1.2 集群的动机和理由 69
3.1.3 集群元素 70
3.1.4 对500强名单的影响 70
3.1.5 简史 71
3.1.6 章节指南 73
3.2 Beowulf集群项目 74
3.3 硬件架构 76
3.3.1 节点 76
3.3.2 系统区域网络 77
3.3.3 辅助存储 78
3.3.4 商业系统摘要 78
3.4 编程接口 78
3.4.1 高性能计算程序设计语言 78
3.4.2 并行编程模式 80
3.5 软件环境 80
3.5.1 操作系统 80
3.5.2 资源管理 82
3.5.3 调试器 83
3.5.4 性能分析 84
3.5.5 可视化 85
3.6 基本使用方法 86
3.6.1 登录 86
3.6.2 用户空间和目录系统 87
3.6.3 包的配置和构建 92
3.6.4 编译器和编译 93
3.6.5 运行应用程序 94
3.7 本章小结及成果 94
3.8 练习 95
参考文献 95
第4章 基准测试程序 97
4.1 引言 97
4.2 HPC基准测试程序的关键属性 100
4.3 标准的HPC社区的基准测试程序 101
4.4 高度并行计算的Linpack 102
4.5 HPC挑战基准测试套件 104
4.6 高性能共轭梯度 106
4.7 NAS并行基准测试程序 110
4.8 Graph500 111
4.9 小型应用作为基准测试程序 115
4.10 本章小结及成果 116
4.11 练习 117
参考文献 118
第5章 资源管理的基础 119
5.1 资源管理 119
5.2 SLURM的基础 123
5.2.1 架构概述 123
5.2.2 工作负载的组织 124
5.2.3 SLURM调度 125
5.2.4 SLURM命令概要 127
5.2.5 SLURM作业脚本 141
5.2.6 SLURM速查表 146
5.3 便携式批量系统基础 147
5.3.1 PBS概述 147
5.3.2 PBS架构 148
5.3.3 PBS命令概要 148
5.3.4 PBS作业脚本 158
5.3.5 PBS速查表 160
5.4 本章小结及成果 161
5.5 练习 162
参考文献 163
第6章 对称多处理器架构 164
6.1 引言 164
6.2 架构概览 165
6.3 阿姆达定律 168
6.4 处理器核心的架构 171
6.4.1 执行流水线 172
6.4.2 指令级并行 173
6.4.3 分支预测 173
6.4.4 直通 174
6.4.5 保留站 174
6.4.6 多线程 174
6.5 存储层次 175
6.5.1 数据重用和局部性 175
6.5.2 存储层次结构 176
6.5.3 存储系统的性能 178
6.6 PCI总线 180
6.7 外部I/O接口 184
6.7.1 网络接口控制器 184
6.7.2 串行高级技术附件 185
6.7.3 JTAG 187
6.7.4 通用串行总线 189
6.8 本章小结及成果 190
6.9 练习 191
参考文献 192
第7章 OpenMP的基础 194
7.1 引言 194
7.2 OpenMP编程模型概览 195
7.2.1 线程并行 195
7.2.2 线程变量 197
7.2.3 运行时库与环境变量 197
7.3 并行线程和循环 199
7.3.1 并行线程 199
7.3.2 私有 200
7.3.3 并行“for”语句 200
7.3.4 块 206
7.4 同步 208
7.4.1 临界同步指令 208
7.4.2 master指令 209
7.4.3 barrier指令 210
7.4.4 single指令 210
7.5 归约 210
7.6 本章小结及成果 212
7.7 练习 213
参考文献 214
第8章 MPI的基础 215
8.1 引言 215
8.2 消息传递接口标准 216
8.3 消息传递接口的基本命令 217
8.3.1 mpi.h 217
8.3.2 MPI_Init 217
8.3.3 MPI_Finalize 218
8.3.4 消息传递接口例子—Hello World 218
8.4 通信器 219
8.4.1 size 220
8.4.2 rank 220
8.4.3 例子 221
8.5 点对点消息 222
8.5.1 MPI发送 222
8.5.2 消息传递接口的数据类型 222
8.5.3 MPI接收 223
8.5.4 例子 223
8.6 同步聚合 225
8.6.1 聚合调用概览 225
8.6.2 栅栏同步 225
8.6.3 例子 226
8.7 通信聚合 227
8.7.1 聚合数据移动 228
8.7.2 广播 230
8.7.3 分散 231
8.7.4 收集 233
8.7.5 全局收集 234
8.7.6 归约操作 235
8.7.7 全局到全局 238
8.8 非阻塞式点对点通信 240
8.9 用户自定义数据类型 242
8.10 本章小结及成果 243
8.11 练习 244
参考文献 244
第9章 并行算法 245
9.1 引言 245
9.2 分支-聚合 246
9.3 分治 247
9.4 管理者-工作者 249
9.5 易并行 250
9.6 光环交换 251
9.6.1 使用有限差分的平流方程 251
9.6.2 稀疏矩阵向量乘法 254
9.7 置换:佳能算法 256
9.8 任务数据流:广度优先搜索 261
9.9 本章小结及成果 263
9.10 练习 263
参考文献 264
第10章 库 265
10.1 引言 265
10.2 线性代数 267
10.2.1 基本线性代数子程序库 267
10.2.2 线性代数包 273
10.2.3 可扩展的线性代数包 275
10.2.4 GNU科学库 276
10.2.5 Supernodal LU 276
10.2.6 用于科学计算的便携式可扩展工具包 277
10.2.7 用于特征值问题计算的可扩展库 277
10.2.8 千万亿运算级的应用的特征值求解器 278
10.2.9 Hypre:可扩展的线性求解器和多重网格方法 278
10.2.10 用于线性代数的领域特定语言 278
10.3 偏微分方程 280
10.4 图算法 281
10.5 并行输入/输出 281
10.6 网格分解 288
10.7 可视化 289
10.8 并行化 289
10.9 信号处理 289
10.10 性能监控 290
10.11 本章小结及成果 290
10.12 练习 291
参考文献 292
第11章 操作系统 294
11.1 引言 294
11.2 操作系统结构和服务 296
11.2.1 系统组件 296
11.2.2 进程管理 296
11.2.3 内存管理 296
11.2.4 文件管理 296
11.2.5 I/O系统管理 297
11.2.6 辅助存储管理 297
11.3 进程管理 297
11.3.1 进程状态 298
11.3.2 进程控制块 299
11.3.3 进程管理活动 300
11.3.4 调度 301
11.4 线程 302
11.5 内存管理 304
11.5.1 虚拟内存 304
11.5.2 虚拟页地址 304
11.5.3 虚拟地址转换 305
11.6 本章小结及成果 306
11.7 练习 307
第12章 可视化 308
12.1 引言 308
12.2 基本的可视化概念 308
12.3 Gnuplot 310
12.4 Matplotlib 312
12.5 可视化工具包 316
12.6 ParaView 323
12.7 VisIt 323
12.8 本章小结及成果 324
12.9 练习 325
参考文献 325
第13章 性能监控 326
13.1 引言 326
13.2 时间测量 327
13.3 性能分析 333
13.3.1 应用分析的重要性 333
13.3.2 gperftools基础 334
13.4 监控硬件事件 339
13.4.1 perf 339
13.4.2 性能应用程序编程接口 344
13.5 集成的性能监控套件 347
13.6 分布式环境下的分析 350
13.7 本章小结及成果 356
13.8 练习 357
参考文献 358
第14章 调试 360
14.1 引言 360
14.2 工具 362
14.2.1 GNU调试器 362
14.2.2 Valgrind 370
14.2.3 商业版并行调试器 370
14.3 调试OpenMP示例:访问不受保护的共享变量 372
14.4 调试MPI示例:死锁 373
14.5 用于调试的编译器标志 378
14.6 帮助调试的系统监控器 379
14.7 本章小结及成果 381
14.8 练习 381
参考文献 385
第15章 加速器架构 386
15.1 引言 386
15.2 简史 388
15.2.1 协处理器 390
15.2.2 处理器I/O空间中的加速器 394
15.2.3 具备行业标准接口的加速器 395
15.3 图形处理单元简介 397
15.4 图形处理单元功能的进化 399
15.5 现代GPU体系结构 403
15.5.1 计算架构 403
15.5.2 内存实现 406
15.5.3 互连 407
15.5.4 可编程环境 408
15.6 异构系统架构 408
15.7 本章小结及成果 410
15.8 练习 410
参考文献 411
第16章 OpenACC的基础 412
16.1 引言 412
16.1.1 CUDA 413
16.1.2 OpenCL 414
16.1.3 C++ AMP 414
16.1.4 OpenACC 415
16.2 OpenACC编程概念 415
16.3 OpenACC库调用 417
16.4 OpenACC环境变量 419
16.5 OpenACC指令 420
16.5.1 并行构造 420
16.5.2 内核构造 422
16.5.3 数据管理 423
16.5.4 循环调度 427
16.5.5 变量的作用范围 429
16.5.6 原子性 430
16.6 本章小结及成果 431
16.7 练习 432
参考文献 433
第17章 大容量存储器 434
17.1 引言 434
17.2 存储器简史 437
17.3 存储设备技术 438
17.3.1 硬盘驱动器 438
17.3.2 固态硬盘存储器 444
17.3.3 磁带 449
17.3.4 光存储 451
17.4 集中存储 456
17.4.1 独立磁盘冗余阵列 456
17.4.2 存储区域网络 462
17.4.3 网络附加存储 463
17.4.4 三级存储器 464
17.5 本章小结及成果 465
17.6 练习 466
参考文献 466
第18章 文件系统 468
18.1 文件系统的角色和功能 468
18.2 POSIX文件接口的基础 472
18.2.1 文件访问的系统调用 472
18.2.2 缓冲文件I/O 476
18.3 网络文件系统 480
18.4 通用并行文件系统 483
18.5 Lustre文件系统 487
18.6 本章小结及成果 492
18.7 练习 493
参考文献 494
第19章 MapReduce 495
19.1 引言 495
19.2 映射和归约 495
19.2.1 单词计数 496
19.2.2 共享的邻居 497
19.2.3 K均值聚类 498
19.3 分布式计算 499
19.4 Hadoop 500
19.5 本章小结及成果 503
19.6 练习 504
参考文献 504
第20章 检查点技术 505
20.1 引言 505
20.2 系统级检查点 505
20.3 应用级检查点 511
20.4 本章小结及成果 515
20.5 练习 516
参考文献 516
第21章 下一步和未来发展 517
21.1 引言 517
21.2 扩展的并行编程模型 518
21.2.1 消息传递接口的进展 518
21.2.2 OpenMP的进展 518
21.2.3 MPI+X 519
21.3 扩展的高性能计算架构 519
21.3.1 世界上最快的机器 519
21.3.2 轻量级架构 519
21.3.3 现场可编程门阵列 520
21.4 E级计算 521
21.4.1 E级计算的挑战 522
21.4.2 从数学角度看E级的大小 523
21.4.3 加速方法 523
21.4.4 轻量级核心 523
21.5 异步多任务 524
21.5.1 多线程 524
21.5.2 消息驱动的计算 524
21.5.3 全局地址空间 525
21.5.4 行动者同步 526
21.5.5 运行时系统软件 526
21.6 新数字时代 526
21.6.1 数据流 527
21.6.2 元胞自动机 529
21.6.3 仿神经计算 530
21.6.4 量子计算 530
21.7 练习 531
参考文献 531
附录A C语言的基础 532
附录B Linux的基础 547
序言
前言
致谢
第1章 绪论 1
1.1 高性能计算学科 2
1.1.1 定义 3
1.1.2 应用程序 3
1.1.3 性能和指标 3
1.1.4 高性能计算系统 4
1.1.5 超算问题 6
1.1.6 应用编程 7
1.2 超算对科学、社会和安全的影响 8
1.2.1 促进欺诈检测和市场数据分析 8
1.2.2 发现、管理和分配石油和天然气 8
1.2.3 加快制造业的创新 9
1.2.4 个性化医药和药物发现 9
1.2.5 预测自然灾害和了解气候变化 10
1.3 超级计算机剖析 11
1.4 计算机性能 13
1.4.1 性能 13
1.4.2 峰值性能 13
1.4.3 持续性能 14
1.4.4 可扩展性 15
1.4.5 性能退化 15
1.4.6 性能提升 17
1.5 超级计算机简史 17
1.5.1 第一个阶段—利用机械技术的自动计算机 18
1.5.2 第二个阶段—真空管时代的冯·诺依曼架构 19
1.5.3 第三个阶段—指令级并行 23
1.5.4 第四个阶段—向量处理和积分 24
1.5.5 第五个阶段—单指令多数据阵列 27
1.5.6 第六个阶段—顺序处理器的通信和超大规模集成电路 27
1.5.7 第七个阶段—多核和千万亿次 30
1.5.8 新数字时代和超越摩尔定律 30
1.6 作为学生的指南和工具 31
1.7 本章小结及成果 32
1.8 练习 33
参考文献 34
第2章 HPC架构:系统和技术 35
2.1 引言 35
2.2 HPC架构的关键特性 36
2.2.1 速度 36
2.2.2 并行性 36
2.2.3 效率 37
2.2.4 功率 37
2.2.5 可靠性 38
2.2.6 可编程性 38
2.3 并行架构家族—弗林分类法 39
2.4 支持技术 41
2.4.1 技术阶段 41
2.4.2 技术的角色 44
2.4.3 数字逻辑 45
2.4.4 存储技术 47
2.5 冯·诺依曼顺序处理器 50
2.6 向量和流水线 52
2.6.1 流水线并行 53
2.6.2 向量处理 55
2.7 单指令多数据阵列 56
2.7.1 单指令多数据架构 56
2.7.2 阿姆达定律 57
2.8 多处理器 59
2.8.1 共享内存多处理器 60
2.8.2 大规模并行处理器 62
2.8.3 商品集群系统 62
2.9 异构计算机结构 63
2.10 本章小结及成果 64
2.11 练习 65
参考文献 67
第3章 商品集群 68
3.1 引言 68
3.1.1 商品集群的定义 68
3.1.2 集群的动机和理由 69
3.1.3 集群元素 70
3.1.4 对500强名单的影响 70
3.1.5 简史 71
3.1.6 章节指南 73
3.2 Beowulf集群项目 74
3.3 硬件架构 76
3.3.1 节点 76
3.3.2 系统区域网络 77
3.3.3 辅助存储 78
3.3.4 商业系统摘要 78
3.4 编程接口 78
3.4.1 高性能计算程序设计语言 78
3.4.2 并行编程模式 80
3.5 软件环境 80
3.5.1 操作系统 80
3.5.2 资源管理 82
3.5.3 调试器 83
3.5.4 性能分析 84
3.5.5 可视化 85
3.6 基本使用方法 86
3.6.1 登录 86
3.6.2 用户空间和目录系统 87
3.6.3 包的配置和构建 92
3.6.4 编译器和编译 93
3.6.5 运行应用程序 94
3.7 本章小结及成果 94
3.8 练习 95
参考文献 95
第4章 基准测试程序 97
4.1 引言 97
4.2 HPC基准测试程序的关键属性 100
4.3 标准的HPC社区的基准测试程序 101
4.4 高度并行计算的Linpack 102
4.5 HPC挑战基准测试套件 104
4.6 高性能共轭梯度 106
4.7 NAS并行基准测试程序 110
4.8 Graph500 111
4.9 小型应用作为基准测试程序 115
4.10 本章小结及成果 116
4.11 练习 117
参考文献 118
第5章 资源管理的基础 119
5.1 资源管理 119
5.2 SLURM的基础 123
5.2.1 架构概述 123
5.2.2 工作负载的组织 124
5.2.3 SLURM调度 125
5.2.4 SLURM命令概要 127
5.2.5 SLURM作业脚本 141
5.2.6 SLURM速查表 146
5.3 便携式批量系统基础 147
5.3.1 PBS概述 147
5.3.2 PBS架构 148
5.3.3 PBS命令概要 148
5.3.4 PBS作业脚本 158
5.3.5 PBS速查表 160
5.4 本章小结及成果 161
5.5 练习 162
参考文献 163
第6章 对称多处理器架构 164
6.1 引言 164
6.2 架构概览 165
6.3 阿姆达定律 168
6.4 处理器核心的架构 171
6.4.1 执行流水线 172
6.4.2 指令级并行 173
6.4.3 分支预测 173
6.4.4 直通 174
6.4.5 保留站 174
6.4.6 多线程 174
6.5 存储层次 175
6.5.1 数据重用和局部性 175
6.5.2 存储层次结构 176
6.5.3 存储系统的性能 178
6.6 PCI总线 180
6.7 外部I/O接口 184
6.7.1 网络接口控制器 184
6.7.2 串行高级技术附件 185
6.7.3 JTAG 187
6.7.4 通用串行总线 189
6.8 本章小结及成果 190
6.9 练习 191
参考文献 192
第7章 OpenMP的基础 194
7.1 引言 194
7.2 OpenMP编程模型概览 195
7.2.1 线程并行 195
7.2.2 线程变量 197
7.2.3 运行时库与环境变量 197
7.3 并行线程和循环 199
7.3.1 并行线程 199
7.3.2 私有 200
7.3.3 并行“for”语句 200
7.3.4 块 206
7.4 同步 208
7.4.1 临界同步指令 208
7.4.2 master指令 209
7.4.3 barrier指令 210
7.4.4 single指令 210
7.5 归约 210
7.6 本章小结及成果 212
7.7 练习 213
参考文献 214
第8章 MPI的基础 215
8.1 引言 215
8.2 消息传递接口标准 216
8.3 消息传递接口的基本命令 217
8.3.1 mpi.h 217
8.3.2 MPI_Init 217
8.3.3 MPI_Finalize 218
8.3.4 消息传递接口例子—Hello World 218
8.4 通信器 219
8.4.1 size 220
8.4.2 rank 220
8.4.3 例子 221
8.5 点对点消息 222
8.5.1 MPI发送 222
8.5.2 消息传递接口的数据类型 222
8.5.3 MPI接收 223
8.5.4 例子 223
8.6 同步聚合 225
8.6.1 聚合调用概览 225
8.6.2 栅栏同步 225
8.6.3 例子 226
8.7 通信聚合 227
8.7.1 聚合数据移动 228
8.7.2 广播 230
8.7.3 分散 231
8.7.4 收集 233
8.7.5 全局收集 234
8.7.6 归约操作 235
8.7.7 全局到全局 238
8.8 非阻塞式点对点通信 240
8.9 用户自定义数据类型 242
8.10 本章小结及成果 243
8.11 练习 244
参考文献 244
第9章 并行算法 245
9.1 引言 245
9.2 分支-聚合 246
9.3 分治 247
9.4 管理者-工作者 249
9.5 易并行 250
9.6 光环交换 251
9.6.1 使用有限差分的平流方程 251
9.6.2 稀疏矩阵向量乘法 254
9.7 置换:佳能算法 256
9.8 任务数据流:广度优先搜索 261
9.9 本章小结及成果 263
9.10 练习 263
参考文献 264
第10章 库 265
10.1 引言 265
10.2 线性代数 267
10.2.1 基本线性代数子程序库 267
10.2.2 线性代数包 273
10.2.3 可扩展的线性代数包 275
10.2.4 GNU科学库 276
10.2.5 Supernodal LU 276
10.2.6 用于科学计算的便携式可扩展工具包 277
10.2.7 用于特征值问题计算的可扩展库 277
10.2.8 千万亿运算级的应用的特征值求解器 278
10.2.9 Hypre:可扩展的线性求解器和多重网格方法 278
10.2.10 用于线性代数的领域特定语言 278
10.3 偏微分方程 280
10.4 图算法 281
10.5 并行输入/输出 281
10.6 网格分解 288
10.7 可视化 289
10.8 并行化 289
10.9 信号处理 289
10.10 性能监控 290
10.11 本章小结及成果 290
10.12 练习 291
参考文献 292
第11章 操作系统 294
11.1 引言 294
11.2 操作系统结构和服务 296
11.2.1 系统组件 296
11.2.2 进程管理 296
11.2.3 内存管理 296
11.2.4 文件管理 296
11.2.5 I/O系统管理 297
11.2.6 辅助存储管理 297
11.3 进程管理 297
11.3.1 进程状态 298
11.3.2 进程控制块 299
11.3.3 进程管理活动 300
11.3.4 调度 301
11.4 线程 302
11.5 内存管理 304
11.5.1 虚拟内存 304
11.5.2 虚拟页地址 304
11.5.3 虚拟地址转换 305
11.6 本章小结及成果 306
11.7 练习 307
第12章 可视化 308
12.1 引言 308
12.2 基本的可视化概念 308
12.3 Gnuplot 310
12.4 Matplotlib 312
12.5 可视化工具包 316
12.6 ParaView 323
12.7 VisIt 323
12.8 本章小结及成果 324
12.9 练习 325
参考文献 325
第13章 性能监控 326
13.1 引言 326
13.2 时间测量 327
13.3 性能分析 333
13.3.1 应用分析的重要性 333
13.3.2 gperftools基础 334
13.4 监控硬件事件 339
13.4.1 perf 339
13.4.2 性能应用程序编程接口 344
13.5 集成的性能监控套件 347
13.6 分布式环境下的分析 350
13.7 本章小结及成果 356
13.8 练习 357
参考文献 358
第14章 调试 360
14.1 引言 360
14.2 工具 362
14.2.1 GNU调试器 362
14.2.2 Valgrind 370
14.2.3 商业版并行调试器 370
14.3 调试OpenMP示例:访问不受保护的共享变量 372
14.4 调试MPI示例:死锁 373
14.5 用于调试的编译器标志 378
14.6 帮助调试的系统监控器 379
14.7 本章小结及成果 381
14.8 练习 381
参考文献 385
第15章 加速器架构 386
15.1 引言 386
15.2 简史 388
15.2.1 协处理器 390
15.2.2 处理器I/O空间中的加速器 394
15.2.3 具备行业标准接口的加速器 395
15.3 图形处理单元简介 397
15.4 图形处理单元功能的进化 399
15.5 现代GPU体系结构 403
15.5.1 计算架构 403
15.5.2 内存实现 406
15.5.3 互连 407
15.5.4 可编程环境 408
15.6 异构系统架构 408
15.7 本章小结及成果 410
15.8 练习 410
参考文献 411
第16章 OpenACC的基础 412
16.1 引言 412
16.1.1 CUDA 413
16.1.2 OpenCL 414
16.1.3 C++ AMP 414
16.1.4 OpenACC 415
16.2 OpenACC编程概念 415
16.3 OpenACC库调用 417
16.4 OpenACC环境变量 419
16.5 OpenACC指令 420
16.5.1 并行构造 420
16.5.2 内核构造 422
16.5.3 数据管理 423
16.5.4 循环调度 427
16.5.5 变量的作用范围 429
16.5.6 原子性 430
16.6 本章小结及成果 431
16.7 练习 432
参考文献 433
第17章 大容量存储器 434
17.1 引言 434
17.2 存储器简史 437
17.3 存储设备技术 438
17.3.1 硬盘驱动器 438
17.3.2 固态硬盘存储器 444
17.3.3 磁带 449
17.3.4 光存储 451
17.4 集中存储 456
17.4.1 独立磁盘冗余阵列 456
17.4.2 存储区域网络 462
17.4.3 网络附加存储 463
17.4.4 三级存储器 464
17.5 本章小结及成果 465
17.6 练习 466
参考文献 466
第18章 文件系统 468
18.1 文件系统的角色和功能 468
18.2 POSIX文件接口的基础 472
18.2.1 文件访问的系统调用 472
18.2.2 缓冲文件I/O 476
18.3 网络文件系统 480
18.4 通用并行文件系统 483
18.5 Lustre文件系统 487
18.6 本章小结及成果 492
18.7 练习 493
参考文献 494
第19章 MapReduce 495
19.1 引言 495
19.2 映射和归约 495
19.2.1 单词计数 496
19.2.2 共享的邻居 497
19.2.3 K均值聚类 498
19.3 分布式计算 499
19.4 Hadoop 500
19.5 本章小结及成果 503
19.6 练习 504
参考文献 504
第20章 检查点技术 505
20.1 引言 505
20.2 系统级检查点 505
20.3 应用级检查点 511
20.4 本章小结及成果 515
20.5 练习 516
参考文献 516
第21章 下一步和未来发展 517
21.1 引言 517
21.2 扩展的并行编程模型 518
21.2.1 消息传递接口的进展 518
21.2.2 OpenMP的进展 518
21.2.3 MPI+X 519
21.3 扩展的高性能计算架构 519
21.3.1 世界上最快的机器 519
21.3.2 轻量级架构 519
21.3.3 现场可编程门阵列 520
21.4 E级计算 521
21.4.1 E级计算的挑战 522
21.4.2 从数学角度看E级的大小 523
21.4.3 加速方法 523
21.4.4 轻量级核心 523
21.5 异步多任务 524
21.5.1 多线程 524
21.5.2 消息驱动的计算 524
21.5.3 全局地址空间 525
21.5.4 行动者同步 526
21.5.5 运行时系统软件 526
21.6 新数字时代 526
21.6.1 数据流 527
21.6.2 元胞自动机 529
21.6.3 仿神经计算 530
21.6.4 量子计算 530
21.7 练习 531
参考文献 531
附录A C语言的基础 532
附录B Linux的基础 547






