基本信息

编辑推荐
---------------------------并行程序设计:概念与实践---------------------------
针对共享内存和分布式内存体系结构,全面提升并行编程能力
涵盖C++11线程API、OpenMP、CUDA、MPI、UPC++等主题,关注算法及其性能
提供免费的Web实验工具,提升教学效率
Parallel Programming: Concepts and Practice
并行程序设计
概念与实践
[ 德 ] 贝蒂尔·施密特(Bertil Schmidt)
[ 西 ] 豪尔赫·冈萨雷斯-多明格斯(Jorge Gonzá lez-Domínguez)
[ 德 ] 克里斯蒂安·洪特(Christian Hundt)著
[ 德 ] 莫里茨·施拉布(Moritz Schlarb)
张常有 吴长茂 解庆春译
内容简介
计算机书籍
---------------------------并行程序设计:概念与实践---------------------------
本书由德国约翰内斯·古腾堡大学并行和分布式架构团队撰写,对并行编程的高级主题进行了深入讨论,除了涵盖基础概念外,还讲授了共享内存和分布式内存体系结构的实用编程技巧。作者提供了一套进行自动代码评估的开源系统,可方便地访问并行计算资源,这也使得本书特别适合于课堂教学。
---------------------------并行程序设计导论(涵盖并行软件和硬件的方方面面,手把手教你如何利用MPI、PThread 和OpenMP开发高效的并行程序)---------------------------
《并行程序设计导论》全面涵盖了并行软件和硬件的方方面面,深入浅出地介绍如何使用MPI(分布式内存编程)、Pthreads和OpenMP(共享内存编程)编写高效的并行程序。各章节包含了难易程度不同的编程习题。
《并行程序设计导论》可以用做计算机科学专业低年级本科生的专业课程的教材,也可以作为软件开发人员学习并行程序设计的专业参考书。
目录
---------------------------并行程序设计:概念与实践---------------------------
译者序
前言
致谢
第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
译者序
---------------------------并行程序设计导论(涵盖并行软件和硬件的方方面面,手把手教你如何利用MPI、PThread 和OpenMP开发高效的并行程序)---------------------------
An Introduction to Parallel Programming
本书在对并行硬件和并行软件进行知识总结之后,着重介绍如何利用MPI、Pthreads和OpenMP开发高效的并行程序。本书的特点在于:
1) 文字流畅,易于理解。本书内容通俗易懂,简洁实用。清晰的概念解释,配以丰富的实例和易懂的代码,对帮助初学者理解并行程序设计的基本手段非常重要,可以帮助读者很快掌握设计并行程序的基本方法。
2) 循序渐进,由浅及深。本书分别介绍了如何利用MPI、Pthreads和OpenMP进行并行程序设计。每一章都从最基本的实例开始示范,再介绍一些常见问题不同的实现方法,最后分析和比较不同实现方法的性能。这不仅能帮助初学者快速掌握并行编程方法,还能让读者进一步学习开发高效并行程序设计的方法。
3) 重实践,重开发。各章包含了详细介绍的编程实例,以及不同难易程度的编程习题。
本书不仅适合作为计算机专业并行程序设计的课程教材,对需要通过并行程序设计提高计算性能的其他学科(如物理、机械、生物医药等专业)的技术人员,也可以作为参考手册。
本书由上海交通大学邓倩妮副教授主持翻译定稿。此外,冯叶、曾卫、黄鑫、黄叶伟、戴云晶、王强和吕品也参加了本书部分翻译工作,黄鑫还参与了本书的校对工作,对他们的支持和帮助,在此表示衷心的感谢。
由于时间和水平有限,翻译中难免存在不准确,敬请读者指正。
译者
2012年6月
前言
---------------------------并行程序设计:概念与实践---------------------------
并行无处不在!如今,任意一款现代CPU都至少包含2个核心,一些CPU甚至配置了超过50个处理单元。对于有多个CPU的更大的系统,比如多个服务器节点、计算机集群、超级计算机等,它们甚至能够获得更高的并行度。因此,对于科学家、工程师、程序员来说,必须具备在这类系统上直接高效编写程序的能力。本书的主题是全面介绍并行编程领域的知识,以满足上述需求。本书针对共享内存和分布式内存体系结构讲解了实用的并行编程方法,包括C++11线程API、OpenMP、CUDA、MPI、UPC++,以及必不可少的理论背景。本书还提供大量的编程实例,它们基于C++编程语言针对多线程特性的扩展版本C++11和C++14。
本书以“并行编程”或者“高性能计算”两门课程的学生为目标读者。在计算机科学专业或计算机工程专业,很多大学都为高年级本科生或者研究生开设了这两门课程。此外,本书还适合用作其他学科学生在辅修计算机科学时的教材,或者用作相关领域专业人员的参考资料,譬如研究科学家、数据分析师或研发工程师等。理解本书内容需要有编写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编程。
希望本书陪伴你度过快乐时光。充满活力,探索代码!最后,我们将非常高兴能收到你的任何反馈,以便帮助我们尽可能完善本书相关内容。
---------------------------并行程序设计导论(涵盖并行软件和硬件的方方面面,手把手教你如何利用MPI、PThread 和OpenMP开发高效的并行程序)---------------------------
媒体评论
---------------------------并行程序设计:概念与实践---------------------------
并行无处不在!任意一款现代CPU都至少包含两个核心,几乎人手一部的智能手机都配备了多核CPU与异构加速器。因此,对于工程师和程序员而言,学会在这类系统上直接高效编写程序,成为必须具备的重要技能。
本书针对共享内存和分布式内存两种体系结构,介绍了实用的并行编程方法,涵盖C++11线程API、OpenMP、CUDA、MPI、UPC++等内容,既包含基础概念,也提供大量的编程实例和编程工具。
本书特色:
·搭建从概念到实践的桥梁。基于实际应用讲授理论知识,包括基本线性代数例程、机器学习算法、物理模拟等,关注算法的实现和性能评估。
·配备便于教学的实验工具。SAUCE(自动代码评估系统)是专为本书而开发的基于Web的测试环境,便于读者完成章末练习或实现交互编程。
·提供不同侧重的学习路线。无论是高校学生还是企业技术人员,均可从相对独立的介绍性章节开始阅读,然后根据各自需求进阶高级内容。
---------------------------并行程序设计导论(涵盖并行软件和硬件的方方面面,手把手教你如何利用MPI、PThread 和OpenMP开发高效的并行程序)---------------------------
随着多核处理器和云计算系统的广泛应用,毫无疑问,并行计算不再是计算世界中被束之高阁的偏门领域。并行性已经成为有效利用资源的首要因素。由Peter Pacheco(彼得·帕切克)撰写的这本新教材,对于刚开始学术生涯的学生掌握并行计算的艺术和实践很有帮助。
——Duncan Buell 南卡罗来纳州大学计算机科学与工程系
本书阐述了两个越来越重要的领域:使用Pthreads和OpenMP进行共享内存编程,以及使用MPI进行分布式内存编程的基本方法。更重要的是,通过指出可能出现的性能错误,强调好的编程实践的重要性。这些主题包含在计算机科学、物理学和数学等多个学科中。各章包含了大量不同难易程度的编程习题。对希望学习并行编程技巧、更新知识面的学生或专业人士来说,本书是一本理想的参考书。