- ISBN:9787302607373
- 装帧:一般胶版纸
- 册数:暂无
- 重量:暂无
- 开本:16开
- 页数:548
- 出版时间:2022-06-01
- 条形码:9787302607373 ; 978-7-302-60737-3
本书特色
编写可扩展的、快速、强大、节能的程序,才适合处理大量数据。使用并行编程,可将数据处理任务分布在多个CPU上完成,从而从根本上提高性能。只需要稍加学习,读者就可以创建速度和效率的软件。 《并行计算与高性能计算》将讲述用于提高代码运行效率的技术。你将学习评估硬件架构,学会使用OpenMP和MPI等行业标准工具,将掌握用于高性能计算的数据结构和算法,并学习手持设备的节能技术。你甚至可在一组GPU上运行大规模海啸仿真程序。
内容简介
主要内容 ●规划新的并行项目 ●了解CPU和GPU架构上的差异 ●找到性能不佳的内核和循环 ●使用批处理调度来管理应用程序
目录
第Ⅰ部分 并行计算介绍
第1 章 为什么使用并行计算 3
1.1 为什么要学习并行计算 5
1.2 并行计算的基本定律 9
1.3 并行计算如何工作 12
1.4 对并行方法进行分类 24
1.5 并行策略 25
1.6 并行加速与比较加速:两种不同的衡量标准 26
1.7 你将在本书中学到哪些内容 27
1.8 本章小结 28
第2 章 规划并行化 29
2.1 处理新项目:准备工作 30
2.2 概要分析:探测系统功能和应用程序性能之间的差距 42
2.3 计划:成功的基础 42
2.4 实施 44
2.5 提交:高质量的打包过程 45
2.6 进一步探索 46
2.7 本章小结 46
第3 章 性能极限与分析 49
3.1 了解应用程序的潜在性能限制 49
3.2 了解硬件性能:基准测试 52
3.3 描述你的应用程序:分析 59
3.4 进一步探索 71
3.5 本章小结 71
第4 章 数据设计和性能模型 73
4.1 数据结构与性能:面向数据的设计 74
4.2 缓存未命中的3C:强制、容量与冲突 86
4.3 简单性能模型:案例研究 90
4.4 高级性能模型 98
4.5 网络消息 101
4.6 进一步探索 103
4.7 本章小结 104
第5 章 并行算法与模式 105
5.1 并行计算应用的算法分析 105
5.2 性能模型与算法复杂性 106
5.3 什么是并行算法 109
5.4 什么是哈希函数 110
5.5 空间哈希:一种高并行度算法 111
5.6 prefix sum(扫描)模式及其在并行计算中的重要性 132
5.7 并行全局和:解决关联性问题 135
5.8 并行算法研究的未来 141
5.9 进一步探索 141
5.10 本章小结 142
第II 部分 CPU:并行的主力第6 章 向量化:免费的flop 145
6.1 向量及单指令多数据流(SIMD)概要 145
6.2 向量化的硬件趋势 146
6.3 向量化方法 147
6.4 实现更好向量化的编程风格 163
6.5 与编译器向量化相关的编译器标志 164
6.6 使用OpenMP SIMD 指令实现更好的移植性 170
6.7 进一步探索 172
6.8 本章小结 173
第7 章 使用OpenMP 实现并行计算 175
7.1 OpenMP 介绍 175
7.2 典型的OpenMP 用例:循环级OpenMP、高级OpenMP 和MPI +OpenMP 183
7.3 标准循环级OpenMP 示例 185
7.4 OpenMP 中变量范围对结果准确性的重要性 193
7.5 函数级OpenMP:使整个函数实现线程并行 194
7.6 使用高级OpenMP 改进并行可伸缩性 196
7.7 使用OpenMP 混合线程及向量化 201
7.8 使用OpenMP 的高级示例 204
7.9 线程工具对健壮程序的重要性 210
7.10 基于任务的支持算法示例 213
7.11 进一步探索 214
7.12 本章小结 215
第8 章 MPI:并行骨干 217
8.1 MPI 程序基础 217
8.2 用于进程间通信的发送和接收命令 221
8.3 聚合通信:MPI 的强大组件 227
8.4 数据并行示例 236
8.5 使用高级MPI 功能来简化代码和启用优化 245
8.6 通过联合使用MPI 和OpenMP实现极高的可扩展性 257
8.7 进一步探索 259
8.8 本章小结 261
第III 部分 GPU:加速应用程序运行
第9 章 GPU 架构及概念 265
9.1 作为加速计算平台的CPU-GPU系统 266
9.2 GPU 和线程引擎 268
9.3 GPU 内存空间的特点 272
9.4 PCI 总线:CPU 与GPU 之间的数据传输桥梁 278
9.5 多GPU 平台和MPI 284
9.6 GPU 加速平台的潜在收益 286
9.7 何时使用GPU 292
9.8 进一步探索 292
9.9 本章小结 293
第10 章 GPU 编程模型 295
10.1 GPU 编程抽象:通用框架 296
10.2 GPU 编程模型的代码结构 302
10.3 优化GPU 资源利用 306
10.4 约减模式需要跨工作组进行同步 309
10.5 通过队列(流)进行异步计算 310
10.6 为GPU 定制并行化应用程序的策略 311
10.7 进一步探索 312
10.8 本章小结 314
第11 章 基于指令的GPU 编程 315
11.1 为GPU 实现应用编译指令和pragma 的过程 316
11.2 OpenACC:在GPU 上运行的*简单方法 317
11.2.1 编译OpenACC 代码 319
11.2.2 OpenACC 中用于加速计算的并行计算区域 320
11.2.3 使用指令减少CPU 和GPU之间的数据移动 325
11.2.4 优化GPU kernel 329
11.2.5 stream triad 性能结果的总结 334
11.2.6 高级OpenACC 技术 335
11.3 OpenMP:加速器领域的重量级选手 337
11.3.1 编译OpenMP 代码 337
11.3.2 使用OpenMP 在GPU 上生成并行工作 339
11.3.3 使用OpenMP 创建数据区域来控制到GPU 的数据移动 342
11.3.4 为GPU 优化OpenMP 346
11.3.5 用于GPU 的高级OpenMP 350
11.4 进一步探索 353
11.4.1 扩展阅读 353
11.4.2 练习 354
11.5 本章小结 355
第12 章 GPU 语言:深入了解基础知识 357
12.1 原生GPU 编程语言的特性 358
12.2 CUDA 和HIP GPU 语言:底层性能选项 359
12.2.1 编写和构建**个CUDA应用程序 360
12.2.2 CUDA 的约减kernel:事情变得复杂 367
12.2.3 Hipifying CUDA 代码 372
12.3 OpenCL:用于可移植的开源GPU 语言 375
12.3.1 编写和构建**个OpenCL应用程序 376
12.3.2 OpenCL 中的约减 381
12.4 SYCL:一个成为主流的实验性C++实现 384
12.5 性能可移植性的高级语言 387
12.5.1 Kokkos:性能可移植性生态系统 387
12.5.2 RAJA 提供更具适应性的性能可移植性层 390
12.6 进一步探索 392
12.6.1 扩展阅读 392
12.6.2 练习 393
12.7 本章小结 393
第13 章 GPU 配置分析及工具 395
13.1 分析工具概要 395
13.2 如何选择合适的工作流 396
13.3 问题示例:浅水仿真 397
13.4 分析工作流的示例 400
13.4.1 运行浅水应用程序 400
13.4.2 分析CPU 代码来制定行动计划 402
13.4.3 为实施步骤添加OpenACC计算指令 403
13.4.4 添加数据移动指令 405
13.4.5 通过引导分析获取改进建议 406
13.4.6 强大的辅助开发工具:NVIDIA Nsight 工具套件 408
13.4.7 用于AMD GPU 生态系统的CodeXL 409
13.5 专注于重要指标 409
13.5.1 利用率:是否有足够的工作量 410
13.5.2 发布效率:你的warp 是否经常停滞? 410
13.5.3 获得带宽 411
13.6 使用容器和虚拟机来提供备用工作流 411
13.6.1 将Docker 容器作为解决方案 411
13.6.2 使用VirtualBox 虚拟机 413
13.7 移入云端:提供灵活和可扩展能力 415
13.8 进一步探索 415
13.8.1 扩展阅读 415
13.8.2 练习 416
13.9 本章小结 416
第Ⅳ部分 高性能计算生态系统
第14 章 关联性:与kernel 休战 419
14.1 为什么关联性很重要 420
14.2 探索架构 421
14.3 OpenMP 的线程关联 422
14.4 进程关联性与MPI 429
14.4.1 OpenMPI 的默认进程放置 429
14.4.2 进行控制:在OpenMPI 中指定进程放置的基本技术 430
14.4.3 关联性不仅仅是进程绑定:全面讨论 434
14.5 MPI+OpenMP 的关联性 436
14.6 从命令行控制关联性 440
14.6.1 使用hwloc-bind 分配关联性 440
14.6.2 使用likwid-pin: likwid 工具套件中的关联工具 441
14.7 展望未来:在运行时设置和更改关联性 443
14.7.1 在可执行文件中设置关联性 443
14.7.2 在运行时更改进程关联性 445
14.8 进一步探索 447
14.8.1 扩展阅读 447
14.8.2 练习 448
14.9 本章小结 449
第15 章 批处理调度器:为混乱带来秩序 451
15.1 无管理系统所带来的混乱 452
15.2 如何顺利地在繁忙的集群中部署任务 452
15.2.1 繁忙集群中的批处理系统布局 453
15.2.2 如何合理地在繁忙的集群和HPC 站点上运行任务:HPC 中的推荐做法 453
15.3 提交**个批处理脚本 454
15.4 为长时间运行的作业设定自动重启 459
15.5 在批处理脚本中指定依赖项 463
15.6 进一步探索 465
15.6.1 扩展阅读 465
15.6.2 练习 465
15.7 本章小结 466
第16 章 并行环境的文件操作 467
16.1 高性能文件系统的组成部分 467
16.2 标准文件操作:并行到串行(parallel-to-serial)接口 468
16.3 在并行环境中使用MPI
文件操作(MPI-IO) 469
16.4 HDF5 具有自我描述功能,可更好地管理数据 477
16.5 其他并行文件软件包 485
16.6 并行文件系统:硬件接口 485
16.6.1 并行文件设置 485
16.6.2 适用于所有文件系统的通用提示 489
16.6.3 特定文件系统的提示 490
16.7 进一步探索 493
16.7.1 扩展阅读 493
16.7.2 练习 494
16.8 本章小结 494
第17 章 用于编写优质代码的工具和资源 495
17.1 版本控制系统:一切从这里开始 497
17.1.1 分布式版本控制更适合全局协作 498
17.1.2 通过集中版本控制来简化操作并提高代码安全 498
17.2 用于跟踪代码性能的计时器例程 499
17.3 分析器:不去衡量就无法提升 500
17.3.1 日常使用的基于文本的分析器 501
17.3.2 用于快速识别瓶颈的高级分析器 502
17.3.3 使用中级分析器来指导应用程序开发 502
17.3.4 通过详细分析器了解硬件性能的细节信息 504
17.4 benchmark 和mini-apps:了解系统性能的窗口 504
17.4.1 使用benchmark 测量系统性能特征 504
17.4.2 通过mini-apps 提供应用程序的视角 505
17.5 为健壮的应用程序检测及修复内存错误 507
17.5.1 valgrind Memcheck:备用开源方案 507
17.5.2 使用Dr. Memory 诊断内存问题 507
17.5.3 对于要求严苛的应用程序使用商业内存检测工具 509
17.5.4 使用基于编译器的内存工具来简化操作 509
17.5.5 通过Fence-post 检查器来检测越界内存访问 510
17.5.6 GPU 应用程序所使用的内存工具 511
17.6 用于检测竞态条件的线程检查器 512
17.6.1 Intel Inspector:带有GUI 的竞态条件检测工具 512
17.6.2 Archer:一个基于文本的检测竞态条件的工具 512
17.7 Bug-busters:用于消除bug 的调试器 514
17.7.1 在HPC 站点中广泛使用的TotalView 调试器 514
17.7.2 DDT:另一种在HPC 站点广泛使用的调试器 514
17.7.3 Linux 调试器:为本地开发需求提供免费的替代方案 515
17.7.4 通过GPU 调试器消除GPU bug 515
17.8 文件操作分析 516
17.9 包管理器:你的个人系统管理员 519
17.9.1 macOS 的包管理器 519
17.9.2 Windows 包管理器 519
17.9.3 Spack 包管理器:用于高性能计算的包管理器 519
17.10 模块:加载专门的工具链 520
17.10.1 TCL modules:用于加载软件工具链的原始模块系统 522
17.10.2 Lmod:基于Lua 的替代模块实现 523
17.11 思考与练习 523
17.12 本章小结 523
附录A 参考资料 (可从配书网站下载)
附录B 习题答案 (可从配书网站下载)
作者简介
Robert Robey在洛斯阿拉莫斯国家实验室工作,30多年来一直活跃在并行计算领域。Yuliana Zamora目前是芝加哥大学的博士生及Siebel学者,曾在许多国家会议上讲授现代硬件编程技术。
-
有限与无限的游戏:一个哲学家眼中的竞技世界
¥37.4¥68.0 -
全图解零基础word excel ppt 应用教程
¥12.0¥48.0 -
机器学习
¥59.4¥108.0 -
深度学习的数学
¥43.5¥69.0 -
智能硬件项目教程:基于ARDUINO(第2版)
¥37.7¥65.0 -
硅谷之火-人与计算机的未来
¥14.3¥39.8 -
元启发式算法与背包问题研究
¥38.2¥49.0 -
AI虚拟数字人:商业模式+形象创建+视频直播+案例应用
¥62.9¥89.8 -
UNIX环境高级编程(第3版)
¥164.9¥229.0 -
剪映AI
¥52.8¥88.0 -
深度学习高手笔记 卷2:经典应用
¥90.9¥129.8 -
纹样之美:中国传统经典纹样速查手册
¥77.4¥109.0 -
UG NX 12.0数控编程
¥24.8¥45.0 -
MATLAB计算机视觉与深度学习实战(第2版)
¥90.9¥128.0 -
界面交互设计理论研究
¥30.8¥56.0 -
UN NX 12.0多轴数控编程案例教程
¥25.8¥38.0 -
微机组装与系统维护技术教程(第二版)
¥37.8¥43.0 -
明解C语言:实践篇
¥62.9¥89.8 -
Linux服务器架设实战(Linux典藏大系)
¥84.5¥119.0 -
PREMIERE PRO 2023全面精通:视频剪辑+颜色调整+转场特效+字幕制作+案例实战
¥69.3¥99.0