并行程序设计:概念与实践
基本信息

编辑推荐
针对共享内存和分布式内存体系结构,全面提升并行编程能力
涵盖C++11线程API、OpenMP、CUDA、MPI、UPC++等主题,关注算法及其性能
提供免费的Web实验工具,提升教学效率
Parallel Programming: Concepts and Practice
并行程序设计
概念与实践
[ 德 ] 贝蒂尔·施密特(Bertil Schmidt)
[ 西 ] 豪尔赫·冈萨雷斯-多明格斯(Jorge Gonzá lez-Domínguez)
[ 德 ] 克里斯蒂安·洪特(Christian Hundt)著
[ 德 ] 莫里茨·施拉布(Moritz Schlarb)
张常有 吴长茂 解庆春译
内容简介
目录
前言
致谢
第1章 绪论 1
1.1 一个有趣的例子及其分析 2
1.2 并行计算基础 10
1.2.1 分布式内存系统 10
1.2.2 共享内存系统 11
1.2.3 并行程序设计需考虑的因素 13
1.3 HPC动态和排名 15
1.4 附加练习 17
第2章 理论背景 19
2.1 PRAM 20
2.1.1 PRAM变体 21
2.1.2 PRAM上的并行前缀计算 22
2.1.3 PRAM上稀疏数组的压缩算法 24
2.2 网络拓扑 25
2.3 Amdahl定律和Gustafson定律 29
2.4 Foster的并行算法设计方法学 34
2.5 附加练习 37
前言
本书以“并行编程”或者“高性能计算”两门课程的学生为目标读者。在计算机科学专业或计算机工程专业,很多大学都为高年级本科生或者研究生开设了这两门课程。此外,本书还适合用作其他学科学生在辅修计算机科学时的教材,或者用作相关领域专业人员的参考资料,譬如研究科学家、数据分析师或研发工程师等。理解本书内容需要有编写C/C++串行代码的经验,并具备基本的数学知识。
高性能计算和自然科学之间历来有良好的共生关系,我们将基于真实应用讲述并行概念。这些应用包括:基本线性代数例程、机器学习算法,以及物理模拟和计算机科学领域中的传统算法。编写正确而高效的代码是每一位程序员的关键技能,因此我们关注算法的真正实现和性能评估。尽管如此,我们还是深入讨论了算法的理论特性。每章都有一组附加的编程练习,可在本书配套的Web框架中完成这些练习。自动代码评估系统(System for Automated Code Evaluation,SAUCE)为提交解答方案和后续的课堂讲解提供了一个基于Web的测试环境。仅需的前提条件是一个与HTML5兼容的Web浏览器,以支持嵌入课堂教学的交互编程练习。SAUCE已经以docker镜像发布,可在下列网站下载:
https://parallelprogrammingbook.org
该网站汇集了本书相关的在线资源,比如安装指南、勘误表、附加材料(如课件、针对教师精选的部分练习答案)等。
如果你是一名学生或者专业人士,目标是学习编程技术,那么我们建议你首先阅读前3章,从并行编程基础、理论模型、硬件体系结构开始。然后,你就可以深入学习C++11多线程、OpenMP、CUDA或MPI中的任意一章。这些都是介绍性章节,内容几乎自成体系。关于高级C++11多线程、高级CUDA和UPC++的内容依赖前导章节中的技术,所以不能独立阅读。
如果你是一名教师,我们推荐一套包含14讲的授课体系,大体上覆盖了介绍性章节中提到的全部应用程序。你可以从第1章开始,第1讲讨论基础知识,包括利用超立方体并行求和的算法及其分析、基本度量标准(如加速比、并行效率、开销等)以及对排名指标的讨论等。第2讲应该包括PRAM、网络拓扑、强弱可扩展性等。如果将来想详细讨论CUDA,或者重点强调CPU的硬件体系结构,可以在PRAM上分配更多时间。可以用2~3讲的时间讲解C++11线程API、CUDA、MPI方面的基础知识。OpenMP相关内容可以分配1~2讲的时间。剩余时间可以选择讨论多线程、CUDA或者基于PGAS的UPC++语言等高级章节的相关内容。
另外一种可选的方法是,把本书内容分成两门课程,重点放在课堂上的“结对编程”。第一门课可以从基于CPU的并行编程技术开始,涵盖从前3章中选定的主题。这样,C++11多线程、OpenMP、MPI就能够讲解得足够细致。第二门课将侧重于高级并行方法,包括CUDA感知的MPI或基于PGAS的UPC++等技术相结合的扩展CUDA编程。
希望本书陪伴你度过快乐时光。充满活力,探索代码!最后,我们将非常高兴能收到你的任何反馈,以便帮助我们尽可能完善本书相关内容。
媒体评论
本书针对共享内存和分布式内存两种体系结构,介绍了实用的并行编程方法,涵盖C++11线程API、OpenMP、CUDA、MPI、UPC++等内容,既包含基础概念,也提供大量的编程实例和编程工具。
本书特色:
·搭建从概念到实践的桥梁。基于实际应用讲授理论知识,包括基本线性代数例程、机器学习算法、物理模拟等,关注算法的实现和性能评估。
·配备便于教学的实验工具。SAUCE(自动代码评估系统)是专为本书而开发的基于Web的测试环境,便于读者完成章末练习或实现交互编程。
·提供不同侧重的学习路线。无论是高校学生还是企业技术人员,均可从相对独立的介绍性章节开始阅读,然后根据各自需求进阶高级内容。