随着多核体系结构的出现和快速发展,使得并行计算科学的硬件基础设施发生了很大变化,如果把并行硬件基础设施看成是“经济基础”,则其相应的上层并行软件就可以视为“上层建筑”。由于“经济基础”的变化,作为其中重要的“上层建筑”之一的并行程序设计技术,必须进行相应的变化以适应新的“经济基础”。因此如何在多核体系结构上进行高效的并行程序设计以充分利用多核所提供的硬件并行性,从而大幅度地提升并行计算性能指标就显得非常重要。本书的主要论题之一便是环绕这一问题展开的。 并行程序设计比顺序程序设计要困难得多,一是因为并行程序设计的平台不是唯一的,存在多种不同的并行体系结构,而顺序程序设计只有唯一的冯·诺依曼体系结构;二是因为并行程序有多个进程或线程在同时运行,它们之间往往需要进行通信和同步,这就使并行程序设计变得复杂,特别是在要获得线性加速比时尤为如此;三是因为并行程序设计没有顺序程序设计中如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日