基本信息
- 原书名:An Introduction to Parallel Programming
- 原出版社: Morgan Kaufmann; 1 edition

【插图】

内容简介
目录
出版者的话
译者序
本书赞誉
前言
致谢
第1章为什么要并行计算
1.1为什么需要不断提升的性能
1.2为什么需要构建并行系统
1.3为什么需要编写并行程序
1.4怎样编写并行程序
1.5我们将做什么
1.6并发、并行、分布式
1.7本书的其余部分
1.8警告
1.9字体约定
1.10小结
1.11习题
第2章并行硬件和并行软件
2.1背景知识
译者序
本书在对并行硬件和并行软件进行知识总结之后,着重介绍如何利用MPI、Pthreads和OpenMP开发高效的并行程序。本书的特点在于:
1) 文字流畅,易于理解。本书内容通俗易懂,简洁实用。清晰的概念解释,配以丰富的实例和易懂的代码,对帮助初学者理解并行程序设计的基本手段非常重要,可以帮助读者很快掌握设计并行程序的基本方法。
2) 循序渐进,由浅及深。本书分别介绍了如何利用MPI、Pthreads和OpenMP进行并行程序设计。每一章都从最基本的实例开始示范,再介绍一些常见问题不同的实现方法,最后分析和比较不同实现方法的性能。这不仅能帮助初学者快速掌握并行编程方法,还能让读者进一步学习开发高效并行程序设计的方法。
3) 重实践,重开发。各章包含了详细介绍的编程实例,以及不同难易程度的编程习题。
本书不仅适合作为计算机专业并行程序设计的课程教材,对需要通过并行程序设计提高计算性能的其他学科(如物理、机械、生物医药等专业)的技术人员,也可以作为参考手册。
本书由上海交通大学邓倩妮副教授主持翻译定稿。此外,冯叶、曾卫、黄鑫、黄叶伟、戴云晶、王强和吕品也参加了本书部分翻译工作,黄鑫还参与了本书的校对工作,对他们的支持和帮助,在此表示衷心的感谢。
由于时间和水平有限,翻译中难免存在不准确,敬请读者指正。
译者
2012年6月
前言
毫无疑问,这样的现状是需要改变的。虽然许多程序在单核上获得了较满意的性能,但是计算机科学家们必须意识到:并行化有潜力使性能得到巨大提升。当需求提升时,他们应该具备开发这种潜力的能力。
本书旨在部分地解决该问题。它介绍如何使用MPI、Pthreads和OpenMP编写并行程序。MPI、Pthreads和OpenMP是三个广泛应用在并行编程中的应用程序编程接口(Application Programming Interface,API)。本书的预期读者是需要编写并行程序的学生和专业人员。阅读本书仅需要很少的预备知识:大专程度的数学知识和使用C语言编写串行程序的能力。前导知识要求少,因为我们认为学生应该尽快具备编写并行系统的能力。
在旧金山大学,计算机科学专业的学生可以通过学习以本书为教材的课程来达到专业课的要求。“计算机科学导论”是大多数新生在第一个学期学习的课程,本书介绍的课程可以安排为它的后续课程。我们将这门课程作为并行计算的相关课程已经有6年时间。根据我们的经验,学生完全不需要从中、高年级才开始编写并行程序。相反,这门课程十分受欢迎。通过学习这门导论课,学生可以很轻松地将并行性应用于其他课程。
第二学期的新生可以通过课堂学习编写并行程序,而带着目的进行学习的计算机专业人员可以自学并行编程。我们希望本书对于他们是有用的资源。
关于本书
正如前面所说的,本书的主要目的是:让那些对计算机科学只有有限背景知识、没有并行性经验的读者学习使用MPI、Pthreads和OpenMP进行并行编程。为了让本书使用起来更灵活,我们尽量让那些对API没有兴趣的读者花费较少的时间就能很容易地阅读剩下的部分。因此,针对这三个API的章节是相互独立的:可以按任意顺序阅读它们,甚至可以跳过一两个章节。但是,这种独立性有一定代价:有些内容会在这些章节中重复提到。当然,重复的内容可以简单浏览或者直接跳过。
没有并行计算经验的读者应该先阅读第1章。第1章尝试用相关的非技术性的语言解释为什么并行系统已经在计算机领域中占有重要地位。这一章还为并行系统和并行编程提供了一个简短的介绍。
第2章介绍计算机硬件和软件的一些技术背景。在API章节开始之前,许多关于硬件的材料可以先粗略浏览。第3章、第4章、第5章分别介绍使用MPI、Pthreads、OpenMP进行编程。
在第6章中,我们开发了两个更长的程序:并行n体问题求解和并行树搜索。这两个程序都使用上述的三个API。第7章提供一个简单的列表,给出并行计算各个方面的补充信息。
我们使用C语言来开发程序,因为这三个API都使用C语言接口,同时也因为C语言是相对简单易学的语言,尤其是对于C++和Java程序员来说,他们已经对C的控制结构非常熟悉。
课堂使用
本书来源于旧金山大学低年级本科生的课程。这门课满足了计算机科学的专业课要求,同时也是本科生操作系统课程的先修课。本课程唯一的要求是在第一学期的“计算机科学导论”课程中获得B及以上成绩,或在第二学期的“计算机科学导论”课程中获得C及以上成绩。课程的前四个星期介绍C语言编程。由于大部分学生已经编写过Java程序,因此课程主要集中在C语言中如何使用指针上
有趣的是,很多学生认为C语言中的指针比MPI编程更困难。 。课程剩下的部分介绍使用MPI、Pthreads、OpenMP编程。
上述的大部分内容集中在本书第1章、第3章、第4章、第5章中,并在第2章和第6章中有少量提及。当需求提高时,第2章的背景知识应该介绍。比如,在讨论OpenMP(第5章)缓存一致性问题前,应该先介绍第2章中缓存的知识。
本课程的作业包括每周作业、5个编程作业、两次期中考试和一次期末考试。作业中经常涉及编写一个简短的程序或者对现有的程序进行一些小的改进。这些作业的目的是保证学生能够跟上课程,并且根据课堂上的想法得到实际操作经验。这些作业的布置是本课程成功的重要原因。课本中大多数习题与这些简短的作业是相适应的。
编程作业中需要编写更大的程序,但我们一般会为学生提供非常多的指导:我们经常在作业中提供伪代码,并在课堂上讨论较难的部分。这些额外的指导是非常有效的:那些需要花费学生大量时间完成的编程作业变得不再难以提交。期中和期末考试的结果,以及讲授操作系统课程的教师的报告都表明,这门课程对于教授学生如何编写并行程序是非常成功的。
对于其他高级并行计算课程,本书和它的在线辅助材料可以作为补充,许多关于这三个API语法和语义的信息都可以作为课外阅读资料。本书也可以作为工程方面的课程或者与计算机科学无关但涉及并行计算的课程的补充材料。
辅助材料
关于本书的勘误表和一些相关材料,请访问本书出版社的网站(http://www.elsevierdirect.com/),那里还可以下载完整的课件、图表、习题答案和编程作业。所有的用户都可以下载课本中讨论过的较长程序。
媒体评论
——Duncan Buell 南卡罗来纳州大学计算机科学与工程系
本书阐述了两个越来越重要的领域:使用Pthreads和OpenMP进行共享内存编程,以及使用MPI进行分布式内存编程的基本方法。更重要的是,通过指出可能出现的性能错误,强调好的编程实践的重要性。这些主题包含在计算机科学、物理学和数学等多个学科中。各章包含了大量不同难易程度的编程习题。对希望学习并行编程技巧、更新知识面的学生或专业人士来说,本书是一本理想的参考书。
——Leigh Little 纽约州立大学布罗科波特学院计算机科学系
本书是一本精心撰写的、全面介绍并行计算的书籍。学生以及相关领域从业人员会从本书的相关最新信息中获益匪浅。Peter Pacheco通俗易懂的写作手法,结合各种有趣的实例,使本书引人入胜。在并行计算这个瞬息万变、不断发展的领域里,本书深入浅出、全面地介绍了并行软件和并行硬件的方方面面。
——Kathy JLiszka 阿克伦大学计算机科学系
并行计算就是未来! 本书通过实用而有益的例子,介绍了这门复杂的学科。
——Andrew N.Sloss,FBCS ARM公司顾问工程师,《ARM System Developers Guide》作者