并行程序设计原理
基本信息
- 原书名: Principles of Parallel Programming
- 原出版社: Addison Wesley
推荐阅读
内容简介回到顶部↑
书籍
计算机书籍
本书内容新颖,涉及现代并行硬件和软件技术,包括多核体系结构及其并行程序设计技术。本书侧重论述并行程序设计的原理,并论述了并行程序设计中一些深层次问题,如可扩展性、可移植性以及并行程序设计应遵循的方法学等。.
本书是高等院校计算机专业高年级本科生或低年级研究生的理想教科书,同时也是专业程序员从事并行程序设计的理想入门书。..
多核体系结构的出现使得并行程序设计技术对软件工程师和计算机系统设计师变得日益重要。本书着重论述并行计算的基本原理,解释各种现象,并分析为何这些现象是成功进行并行程序设计的机遇或阻碍。
本书是高等院校计算机专业高年级本科生或低年级研究生的理想教科书,同时也是专业程序员从事并行程序设计的理想入门书。
本书特色
·以原理第一的原则重点阐述并行计算的基本原理,而不是指导读者“如何”去管理当前商品化的并行计算机。
·以原理为背景讨论流行的程序设计语言并论述当代并行计算机编程所使用的工具。
·使用注释框对书中所提及的内容进行饶有兴趣的扩展。
·使用定义框对书中关键词和概念进行定义。
·每章附有习题,便于读者掌握所论述的概念。
·第10章着重论述可能影响该研究领域未来的当前进展。
·第11章为读者构造实际的并行程序提供第一手的实践经验。...
计算机书籍
本书内容新颖,涉及现代并行硬件和软件技术,包括多核体系结构及其并行程序设计技术。本书侧重论述并行程序设计的原理,并论述了并行程序设计中一些深层次问题,如可扩展性、可移植性以及并行程序设计应遵循的方法学等。.
本书是高等院校计算机专业高年级本科生或低年级研究生的理想教科书,同时也是专业程序员从事并行程序设计的理想入门书。..
多核体系结构的出现使得并行程序设计技术对软件工程师和计算机系统设计师变得日益重要。本书着重论述并行计算的基本原理,解释各种现象,并分析为何这些现象是成功进行并行程序设计的机遇或阻碍。
本书是高等院校计算机专业高年级本科生或低年级研究生的理想教科书,同时也是专业程序员从事并行程序设计的理想入门书。
本书特色
·以原理第一的原则重点阐述并行计算的基本原理,而不是指导读者“如何”去管理当前商品化的并行计算机。
·以原理为背景讨论流行的程序设计语言并论述当代并行计算机编程所使用的工具。
·使用注释框对书中所提及的内容进行饶有兴趣的扩展。
·使用定义框对书中关键词和概念进行定义。
·每章附有习题,便于读者掌握所论述的概念。
·第10章着重论述可能影响该研究领域未来的当前进展。
·第11章为读者构造实际的并行程序提供第一手的实践经验。...
目录回到顶部↑
出版者的话.
推荐序
译者序
前言
第一部分 基础
第1章 导论2
1.1 并行的威力和潜能2
1.1.1 并行,一个熟悉的概念2
1.1.2 计算机程序中的并行2
1.1.3 多核计算机,一个机遇3
1.1.4 使用并行硬件的更多机遇4
1.1.5 并行计算和分布式计算的比较4
1.1.6 系统级并行5
1.1.7 并行抽象的便利5
1.2 考察顺序程序和并行程序6
1.2.1 并行化编译器6
1.2.2 范例求解的变化7
1.2.3 并行前缀求和8
1.3 使用多指令流实现并行9
1.3.1 线程概念9
推荐序
译者序
前言
第一部分 基础
第1章 导论2
1.1 并行的威力和潜能2
1.1.1 并行,一个熟悉的概念2
1.1.2 计算机程序中的并行2
1.1.3 多核计算机,一个机遇3
1.1.4 使用并行硬件的更多机遇4
1.1.5 并行计算和分布式计算的比较4
1.1.6 系统级并行5
1.1.7 并行抽象的便利5
1.2 考察顺序程序和并行程序6
1.2.1 并行化编译器6
1.2.2 范例求解的变化7
1.2.3 并行前缀求和8
1.3 使用多指令流实现并行9
1.3.1 线程概念9
译者序回到顶部↑
随着多核体系结构的出现和快速发展,使得并行计算科学的硬件基础设施发生了很大变化,如果把并行硬件基础设施看成是“经济基础”,则其相应的上层并行软件就可以视为“上层建筑”。由于“经济基础”的变化,作为其中重要的“上层建筑”之一的并行程序设计技术,必须进行相应的变化以适应新的“经济基础”。因此如何在多核体系结构上进行高效的并行程序设计以充分利用多核所提供的硬件并行性,从而大幅度地提升并行计算性能指标就显得非常重要。本书的主要论题之一便是环绕这一问题展开的。.
并行程序设计比顺序程序设计要困难得多,一是因为并行程序设计的平台不是唯一的,存在多种不同的并行体系结构,而顺序程序设计只有唯一的冯·诺依曼体系结构;二是因为并行程序有多个进程或线程在同时运行,它们之间往往需要进行通信和同步,这就使并行程序设计变得复杂,特别是在要获得线性加速比时尤为如此;三是因为并行程序设计没有顺序程序设计中如C及Java那样通用和普及的并行程序设计语言,因此只能针对不同的体系结构选择使用不同的并行语言或例程库,例如对于共享地址空间的体系结构就必须选择如OpenMP、Java Threads或POSIX Threads那样的语言,而对于分布地址空间的体系结构就不得不选择如MPI或PVM那样的例程库语言。此外若要开发数据并行性,则就需要选用高性能的如Fortran(HPF)那样的语言。本书另一个主要论题便是环绕这一问题展开的。
本书侧重论述并行程序设计的基本原理,解释各种现象,并分析为何这些现象意味着成功进行并行程序设计的机遇或是阻碍。并行的硬件基础设施和并行的软件设计环境随着时间的变迁会不断发生变化,但原理则永远不会过时。以原理作为第一要素进行论述是本书的特色之一。
本书的另一个特色是,它侧重可扩展性和可移植性,即所设计的并行程序具有在任何数目处理器系统上和在任何并行体系结构平台上运行良好的能力。这一概念在多核时代是非常关键的,这是因为:首先,使得并行计算具有可扩展能力的大多数技术与在多核芯片上生成高效求解的技术是相同的;其次,虽然目前的多核芯片所具有的处理器数目还比较小,通常是2~8个,但今后每个芯片上的核数将会急剧增加,这就使得可扩展并行概念与之直接相关;最后,显然我们应该侧重研究和开发那些在现在和将来都能很好工作的方法。..
内容非常实用是本书的又一特色。这是因为本书在介绍并行程序设计系统的同时,还叙述如何在这些系统中应用并行程序的设计原理。作者通过自身丰富的实践经验为读者介绍了在从事并行程序设计时应遵循的方法学。译者认为从事并行程序设计者应注重对并行程序设计方法学的了解、掌握,以及有关素质的培养,唯此才能开发出性能良好以及生命力持久的并行程序,并提高编制并行程序的能力和生产率。
翻译本书的原因有两个:一是本书的内容相当新,涉及现代的并行硬件和软件技术,包括多核体系结构及其并行程序设计技术;二是本书论述了并行程序设计中的一些深层次问题,如可扩展性、可移植性以及并行程序设计应遵循的方法学等。本书的不足之处在于对一些性能问题的定量分析不够充实,此外所介绍的并行机抽象模型也不够全面,只有一个CTA模型。但这些瑕疵并不会影响本书的阅读价值。
本书是计算机科学专业本科高年级学生或一年级硕士生的理想教科书,对专业程序员来讲则是从事并行程序设计的一本理想入门书。本书对软件工程师和计算机系统设计师也是非常值得一读的参考书。
本书的翻译工作由陆鑫达教授负责和组织。陆鑫达教授翻译了目录、前言、第1~4章以及第10~11 章,林新华老师翻译了第5~9章。译稿全文由陆鑫达教授统稿审校。原书只分章不分节,为方便读者阅读,我们统一进行了分节。值此中译本出版之际,译者特向机械工业出版社华章公司的策划和编辑人员表示深切的谢意。
书中的术语翻译,我们尽量采用已公布的计算机科学技术名词(第二版),对于一些未公布的术语(包括一些新出现的术语)我们尽量采用流行的译法。由于时间较为仓促,翻译中的错误或不妥之处在所难免,敬请广大读者不吝指正。
致谢
在本书行将付梓之前,承蒙Sun公司高性能计算及云计算技术中心主任兼首席科学家Simon See博士拨冗为本译著撰写了推荐序,在此仅表深切的谢意!
上海交通大学计算机科学与工程系
陆鑫达 林新华
2009年6月10日...
并行程序设计比顺序程序设计要困难得多,一是因为并行程序设计的平台不是唯一的,存在多种不同的并行体系结构,而顺序程序设计只有唯一的冯·诺依曼体系结构;二是因为并行程序有多个进程或线程在同时运行,它们之间往往需要进行通信和同步,这就使并行程序设计变得复杂,特别是在要获得线性加速比时尤为如此;三是因为并行程序设计没有顺序程序设计中如C及Java那样通用和普及的并行程序设计语言,因此只能针对不同的体系结构选择使用不同的并行语言或例程库,例如对于共享地址空间的体系结构就必须选择如OpenMP、Java Threads或POSIX Threads那样的语言,而对于分布地址空间的体系结构就不得不选择如MPI或PVM那样的例程库语言。此外若要开发数据并行性,则就需要选用高性能的如Fortran(HPF)那样的语言。本书另一个主要论题便是环绕这一问题展开的。
本书侧重论述并行程序设计的基本原理,解释各种现象,并分析为何这些现象意味着成功进行并行程序设计的机遇或是阻碍。并行的硬件基础设施和并行的软件设计环境随着时间的变迁会不断发生变化,但原理则永远不会过时。以原理作为第一要素进行论述是本书的特色之一。
本书的另一个特色是,它侧重可扩展性和可移植性,即所设计的并行程序具有在任何数目处理器系统上和在任何并行体系结构平台上运行良好的能力。这一概念在多核时代是非常关键的,这是因为:首先,使得并行计算具有可扩展能力的大多数技术与在多核芯片上生成高效求解的技术是相同的;其次,虽然目前的多核芯片所具有的处理器数目还比较小,通常是2~8个,但今后每个芯片上的核数将会急剧增加,这就使得可扩展并行概念与之直接相关;最后,显然我们应该侧重研究和开发那些在现在和将来都能很好工作的方法。..
内容非常实用是本书的又一特色。这是因为本书在介绍并行程序设计系统的同时,还叙述如何在这些系统中应用并行程序的设计原理。作者通过自身丰富的实践经验为读者介绍了在从事并行程序设计时应遵循的方法学。译者认为从事并行程序设计者应注重对并行程序设计方法学的了解、掌握,以及有关素质的培养,唯此才能开发出性能良好以及生命力持久的并行程序,并提高编制并行程序的能力和生产率。
翻译本书的原因有两个:一是本书的内容相当新,涉及现代的并行硬件和软件技术,包括多核体系结构及其并行程序设计技术;二是本书论述了并行程序设计中的一些深层次问题,如可扩展性、可移植性以及并行程序设计应遵循的方法学等。本书的不足之处在于对一些性能问题的定量分析不够充实,此外所介绍的并行机抽象模型也不够全面,只有一个CTA模型。但这些瑕疵并不会影响本书的阅读价值。
本书是计算机科学专业本科高年级学生或一年级硕士生的理想教科书,对专业程序员来讲则是从事并行程序设计的一本理想入门书。本书对软件工程师和计算机系统设计师也是非常值得一读的参考书。
本书的翻译工作由陆鑫达教授负责和组织。陆鑫达教授翻译了目录、前言、第1~4章以及第10~11 章,林新华老师翻译了第5~9章。译稿全文由陆鑫达教授统稿审校。原书只分章不分节,为方便读者阅读,我们统一进行了分节。值此中译本出版之际,译者特向机械工业出版社华章公司的策划和编辑人员表示深切的谢意。
书中的术语翻译,我们尽量采用已公布的计算机科学技术名词(第二版),对于一些未公布的术语(包括一些新出现的术语)我们尽量采用流行的译法。由于时间较为仓促,翻译中的错误或不妥之处在所难免,敬请广大读者不吝指正。
致谢
在本书行将付梓之前,承蒙Sun公司高性能计算及云计算技术中心主任兼首席科学家Simon See博士拨冗为本译著撰写了推荐序,在此仅表深切的谢意!
上海交通大学计算机科学与工程系
陆鑫达 林新华
2009年6月10日...
前言回到顶部↑
对于那些因多核芯片出现而激发起学习并行程序热情的读者来说,你找对了地方。本书是为并行计算机无处不在的这个世界而编写的,这种并行计算机涉及广泛,从具有两核芯片的膝上计算机,到超级计算机,再到用于搜索因特网的巨大数据中心机群。.
本书侧重可扩展并行,即并行程序具有在任何数目处理器上运行良好的能力。这一概念是非常关键的,原因有二:(1)创建可扩展并行计算所需的大多数技术与在多核芯片上生成高效求解的技术是相同的;(2)目前的多核芯片具有适中数目的处理器,通常是2~8个,在未来几年内每个芯片上的核数肯定会急剧增加,这就使得可扩展并行概念与之直接相关。因而,尽管今天的多核芯片为核间低时延通信提供了机遇,但这种特性很可能只能在短期内得益,因为当芯片上的核数增长时,芯片内不同部分的片内延迟将明显增加。所以,我们不会侧重开发这种短期得益的方法,而是侧重那些能在现在和将来都能很好工作的方法。当然,多核芯片还面临着自身的挑战,特别是它们有限的片外存储器带宽,以及有限的片上总的cache容量。本书也将讨论这些问题。
首先,我们讨论构成实用和高效并行程序的原理。为了获取如程序设计那样复杂的能力,学习原理是至关重要的。当然,对于并行程序设计来讲,原理也许更加重要,因为最新技术水平的变化很快。如果训练过于紧密地捆绑于某个特定的计算机系统或一种语言,将不具有跟上技术发展步伐的支撑力。可是原理(应用于任何并行计算系统的概念以及开发这些特征的观念)对人们深入理解和掌握相关知识将提供深远的影响。
但我们并不会止步于对抽象概念的讨论,还会将那些原理应用到日常的计算中,这将使本书非常实用。我们将介绍几个并行程序设计系统,还将描述在程序设计系统中如何应用这些原理。我们期望读者在读完本书后能编写并行程序。在最后一章我们将专门讨论并行程序设计技术,以及介绍如何开发一个有关并行程序设计的结课课程设计,这个设计可能需要历时一个学期。
读者对象
读者对象可以是任何人,大学生或专业人员,只要他能用C或类似语言成功进行编程,以及自认为是程序员的人。如果具有计算机执行顺序程序的概念,包括取指/执行周期以及高速缓存基础的知识,则就更易理解本书的内容。本书最初的定位是计算机科学专业的高年级学生以及具有计算机科学学士学位的一年级研究生,现在本书仍然适合这一程度。然而,作为本书的宗旨,我们减少了对预备知识的要求,而强调对知识的传授,如果读者已经掌握某些解释所涉及的知识,只需跳过这些知识。
本书结构
因为并行程序设计并不是读者所熟悉的顺序程序设计的直接扩展,所以我们将本书分为四部分:
基础:第1~3章
并行抽象:第4~5章
并行程序设计语言:第6~9章
展望:第10~11章
为使读者能明智地从中选择感兴趣的部分,我们下面说明各部分的目的和内容。
基础 在第1章中,我们通过实现一个计算说明并行程序员必须处理的许多问题是多么困难,而在为顺序计算机编写同样的程序时则非常简单。该例子将我们的注意力集中到一些贯穿于全书与我们相关的论题, 但它也强调了解并行计算机是如何操作的重要性。第2章介绍5种不同类型的并行计算机,描述了其体系结构中的少量细节,以及它们扩展到更大规模的能力。在这一章中得出了两个关键的结论:第一,不像顺序计算,并行计算机没有一个标准的体系结构。第二,为了能适应这种体系结构的多样性,我们需要一个抽象的机器模型以指导我们的程序设计。我们给出了一个抽象模型。在留意体系结构的基础上,第3章的内容涉及并发性(包括线程和进程)、时延、带宽、加速比等基本概念,侧重叙述与性能相关的问题。第一部分这些基础内容为第二部分讲解算法和抽象做好了准备。
并行抽象 为支持并行算法的设计和讨论,第4章为编写独立于语言的并行程序引入了一个非正式的伪代码符号。该符号具有跨各种程序设计模型和方法的许多特性,允许我们在讨论算法时不会偏向任何具体的语言或机器。为了引导读者考虑并行算法,第5章介绍了一系列的基本算法技术。在阅读完第二部分后,读者将掌握以并行方式求解问题的方法,从而可使我们进入最后一个问题,即以一个具体的并行程序设计语言来编码算法。..
并行程序设计语言 还没有一种并行程序设计语言,能够如C或Java在顺序程序设计中所起的作用那样,为大家所熟知和接受,并作为编码算法的基本手段。为此,第三部分介绍了三种并行程序设计语言:基于线程的语言(第6章),消息传递语言(第7章)和高级语言(第8章)。我们所论及的每种语言的内容,足以使读者能编写小的练习;但编写重大的问题将需要更完整的语言介绍,这可通过在线资源获得。除了介绍一种语言,每一章还包含一个有关语言的简短综述,这些语言在并行程序设计社团中有一批追随者。第9章简单地比较和对比了所有已论述的语言,指明它们的优缺点。能通读这三章最好,但是我们知道许多读者将只会定格在一种方法上,因此这三章是相互独立的。
展望 第四部分是展望未来。第10章涉及一系列新的、有前途的并行技术,它们无疑将影响未来的研究和实践。我们的观点是,这些技术还未为它们的“全盛时期做好准备”,但它们是重要的,且值得我们去熟悉它们,即使在它们还未被完全部署之前。最后,第11章侧重论述并行机程序设计的第一手实践技术。该章的前两节应在研究并行程序设计之前阅读,也许与第4章和第5章的抽象一起学习更好。但该章的主要目的是帮助读者编写作为结课课程设计内容的一个真实程序。
本书使用方法
虽然本书的内容以逻辑顺序排列,但也不必从头到尾阅读本书。的确,作为一个学期的课程,在学完所有论题之前就开始程序设计的练习,这可能是一个明智的选择。请看如下的一个明智的学习计划:
·第1章和第2章
本书侧重可扩展并行,即并行程序具有在任何数目处理器上运行良好的能力。这一概念是非常关键的,原因有二:(1)创建可扩展并行计算所需的大多数技术与在多核芯片上生成高效求解的技术是相同的;(2)目前的多核芯片具有适中数目的处理器,通常是2~8个,在未来几年内每个芯片上的核数肯定会急剧增加,这就使得可扩展并行概念与之直接相关。因而,尽管今天的多核芯片为核间低时延通信提供了机遇,但这种特性很可能只能在短期内得益,因为当芯片上的核数增长时,芯片内不同部分的片内延迟将明显增加。所以,我们不会侧重开发这种短期得益的方法,而是侧重那些能在现在和将来都能很好工作的方法。当然,多核芯片还面临着自身的挑战,特别是它们有限的片外存储器带宽,以及有限的片上总的cache容量。本书也将讨论这些问题。
首先,我们讨论构成实用和高效并行程序的原理。为了获取如程序设计那样复杂的能力,学习原理是至关重要的。当然,对于并行程序设计来讲,原理也许更加重要,因为最新技术水平的变化很快。如果训练过于紧密地捆绑于某个特定的计算机系统或一种语言,将不具有跟上技术发展步伐的支撑力。可是原理(应用于任何并行计算系统的概念以及开发这些特征的观念)对人们深入理解和掌握相关知识将提供深远的影响。
但我们并不会止步于对抽象概念的讨论,还会将那些原理应用到日常的计算中,这将使本书非常实用。我们将介绍几个并行程序设计系统,还将描述在程序设计系统中如何应用这些原理。我们期望读者在读完本书后能编写并行程序。在最后一章我们将专门讨论并行程序设计技术,以及介绍如何开发一个有关并行程序设计的结课课程设计,这个设计可能需要历时一个学期。
读者对象
读者对象可以是任何人,大学生或专业人员,只要他能用C或类似语言成功进行编程,以及自认为是程序员的人。如果具有计算机执行顺序程序的概念,包括取指/执行周期以及高速缓存基础的知识,则就更易理解本书的内容。本书最初的定位是计算机科学专业的高年级学生以及具有计算机科学学士学位的一年级研究生,现在本书仍然适合这一程度。然而,作为本书的宗旨,我们减少了对预备知识的要求,而强调对知识的传授,如果读者已经掌握某些解释所涉及的知识,只需跳过这些知识。
本书结构
因为并行程序设计并不是读者所熟悉的顺序程序设计的直接扩展,所以我们将本书分为四部分:
基础:第1~3章
并行抽象:第4~5章
并行程序设计语言:第6~9章
展望:第10~11章
为使读者能明智地从中选择感兴趣的部分,我们下面说明各部分的目的和内容。
基础 在第1章中,我们通过实现一个计算说明并行程序员必须处理的许多问题是多么困难,而在为顺序计算机编写同样的程序时则非常简单。该例子将我们的注意力集中到一些贯穿于全书与我们相关的论题, 但它也强调了解并行计算机是如何操作的重要性。第2章介绍5种不同类型的并行计算机,描述了其体系结构中的少量细节,以及它们扩展到更大规模的能力。在这一章中得出了两个关键的结论:第一,不像顺序计算,并行计算机没有一个标准的体系结构。第二,为了能适应这种体系结构的多样性,我们需要一个抽象的机器模型以指导我们的程序设计。我们给出了一个抽象模型。在留意体系结构的基础上,第3章的内容涉及并发性(包括线程和进程)、时延、带宽、加速比等基本概念,侧重叙述与性能相关的问题。第一部分这些基础内容为第二部分讲解算法和抽象做好了准备。
并行抽象 为支持并行算法的设计和讨论,第4章为编写独立于语言的并行程序引入了一个非正式的伪代码符号。该符号具有跨各种程序设计模型和方法的许多特性,允许我们在讨论算法时不会偏向任何具体的语言或机器。为了引导读者考虑并行算法,第5章介绍了一系列的基本算法技术。在阅读完第二部分后,读者将掌握以并行方式求解问题的方法,从而可使我们进入最后一个问题,即以一个具体的并行程序设计语言来编码算法。..
并行程序设计语言 还没有一种并行程序设计语言,能够如C或Java在顺序程序设计中所起的作用那样,为大家所熟知和接受,并作为编码算法的基本手段。为此,第三部分介绍了三种并行程序设计语言:基于线程的语言(第6章),消息传递语言(第7章)和高级语言(第8章)。我们所论及的每种语言的内容,足以使读者能编写小的练习;但编写重大的问题将需要更完整的语言介绍,这可通过在线资源获得。除了介绍一种语言,每一章还包含一个有关语言的简短综述,这些语言在并行程序设计社团中有一批追随者。第9章简单地比较和对比了所有已论述的语言,指明它们的优缺点。能通读这三章最好,但是我们知道许多读者将只会定格在一种方法上,因此这三章是相互独立的。
展望 第四部分是展望未来。第10章涉及一系列新的、有前途的并行技术,它们无疑将影响未来的研究和实践。我们的观点是,这些技术还未为它们的“全盛时期做好准备”,但它们是重要的,且值得我们去熟悉它们,即使在它们还未被完全部署之前。最后,第11章侧重论述并行机程序设计的第一手实践技术。该章的前两节应在研究并行程序设计之前阅读,也许与第4章和第5章的抽象一起学习更好。但该章的主要目的是帮助读者编写作为结课课程设计内容的一个真实程序。
本书使用方法
虽然本书的内容以逻辑顺序排列,但也不必从头到尾阅读本书。的确,作为一个学期的课程,在学完所有论题之前就开始程序设计的练习,这可能是一个明智的选择。请看如下的一个明智的学习计划:
·第1章和第2章
序言回到顶部↑
早在1842年,意大利数学家Luigi Menabrea就在其《查尔斯·巴贝奇的分析引擎》(《Sketch Of the Analytical Engine Invented by Charles Babbage》)一文中阐述了并行的理念。他的这篇文章涉及计算机系统结构和程序设计的诸多方面。到了1958年,S.Gill针对并行程序设计进行了探讨,而IBM的JohnCocke和Daniel Slotnick则针对并行数值计算进行了探讨。然而直到1962年,第一台多处理计算机才藉由Burroughs公司的D825而面世。此后,为数众多的公司提出并推出了不同系统结构的多处理器系统。.
曾几何时,工业界和学术界进行了无数次的尝试,力图将并行程序设计置于主流程序设计的核心地位,但由于种种原因,这些尝试最终都未能取得成功。最主要的原因在于我们既然有能力将处理器的主频每12—18个月就增加一倍,因此除了那些依赖于大规模并行系统来加速其模拟运算的科学社团外,其他人就几乎找不到任何理由来编写并行程序。
然而近来,半导体工业界与微处理器供应商却遭遇到了屏障,即虽然我们依然能增加芯片的密度,但却再也无法增加主频。有鉴于此,多核处理器开始登场,比如Sun的Niagara系列,IBM的Power系列,AMD的Opteron,以及Intel的Xeon。事实上,供应商们未来将会提供时钟速度更低但核数更多的处理器,如Intel的Nehalem以及AMD的Istanbul。此外,其他形式的加速器也纷纷登场,例如GPGPU(如Nvidia的Tesla,AMD的Firestream,Intel的Larabee),Cell处理器,以及FPGA。
这就意味着,为了能充分利用多核处理器,我们必须寻找应用内在的并行性,必须要编写具有并行线程的代码。我们已然预见到串行程序会“逐渐减速”,以此观之,似乎并行程序设计的概念终将成为未来主流程序员所必须掌握的重要概念。..
《并行程序设计原理》一书对学生以及初学者将颇有裨益。两位作者Calvin Lin和Lawrence Snyder非常细致地将各种原则与当前的并行硬件和软件场景联系了起来,使得本书既能扎根于计算机科学的基础,又能与时俱进。这本全新的可实践且实用的书,必将使得阅读引人人胜且充满趣味。
本书着力介绍一系列不同类型的程序设计工具:如在共享存储器程序设计中介绍了Pthread、Java Threads以及OpenMP,而在消息传递程序设计中将MPI作为局部视图语言的代表,并提及了UPC等PGAS语言,而将ZPL作为全局视图语言的典范,此外还提及了3个最新的并行程序设计语言,即Sun的Fortress,IBM的X10,以及Cray的Chapel。
本书还探讨了一些高级内容:比如“理想”的并行程序设计语言所应遵循的基本原则,并行软件开发的方法学和方式,如在敏捷软件开发中最常用的增量式开发。
本书无论对于积极进取的HPC业内人士来说,还是通用程序员而言,都是一本极具价值的参考书。总之,这本可靠而翔实的书探讨了整个社团所将面临的有关并行化的挑战与问题。
Simon See博士
Sun高性能计算及云计算技术中心主任兼首席科学家
新加坡南洋理工大学兼职副教授
2009年6月...
曾几何时,工业界和学术界进行了无数次的尝试,力图将并行程序设计置于主流程序设计的核心地位,但由于种种原因,这些尝试最终都未能取得成功。最主要的原因在于我们既然有能力将处理器的主频每12—18个月就增加一倍,因此除了那些依赖于大规模并行系统来加速其模拟运算的科学社团外,其他人就几乎找不到任何理由来编写并行程序。
然而近来,半导体工业界与微处理器供应商却遭遇到了屏障,即虽然我们依然能增加芯片的密度,但却再也无法增加主频。有鉴于此,多核处理器开始登场,比如Sun的Niagara系列,IBM的Power系列,AMD的Opteron,以及Intel的Xeon。事实上,供应商们未来将会提供时钟速度更低但核数更多的处理器,如Intel的Nehalem以及AMD的Istanbul。此外,其他形式的加速器也纷纷登场,例如GPGPU(如Nvidia的Tesla,AMD的Firestream,Intel的Larabee),Cell处理器,以及FPGA。
这就意味着,为了能充分利用多核处理器,我们必须寻找应用内在的并行性,必须要编写具有并行线程的代码。我们已然预见到串行程序会“逐渐减速”,以此观之,似乎并行程序设计的概念终将成为未来主流程序员所必须掌握的重要概念。..
《并行程序设计原理》一书对学生以及初学者将颇有裨益。两位作者Calvin Lin和Lawrence Snyder非常细致地将各种原则与当前的并行硬件和软件场景联系了起来,使得本书既能扎根于计算机科学的基础,又能与时俱进。这本全新的可实践且实用的书,必将使得阅读引人人胜且充满趣味。
本书着力介绍一系列不同类型的程序设计工具:如在共享存储器程序设计中介绍了Pthread、Java Threads以及OpenMP,而在消息传递程序设计中将MPI作为局部视图语言的代表,并提及了UPC等PGAS语言,而将ZPL作为全局视图语言的典范,此外还提及了3个最新的并行程序设计语言,即Sun的Fortress,IBM的X10,以及Cray的Chapel。
本书还探讨了一些高级内容:比如“理想”的并行程序设计语言所应遵循的基本原则,并行软件开发的方法学和方式,如在敏捷软件开发中最常用的增量式开发。
本书无论对于积极进取的HPC业内人士来说,还是通用程序员而言,都是一本极具价值的参考书。总之,这本可靠而翔实的书探讨了整个社团所将面临的有关并行化的挑战与问题。
Simon See博士
Sun高性能计算及云计算技术中心主任兼首席科学家
新加坡南洋理工大学兼职副教授
2009年6月...








点击看大图






加载中...

