基本信息

内容简介
作译者
目录
前 言
第1章 概述 1
1.1 多核计算机时代 1
1.2 并行计算机的分类 3
1.3 现代计算机概览 4
1.3.1 Cell BE处理器 5
1.3.2 NVIDIA Kepler 6
1.3.3 AMD APU 9
1.3.4 从多核到众核:Tilera TILE-Gx8072和Intel Xeon Phi 10
1.4 性能指标 12
1.5 并行程序性能的预测与测量 16
1.5.1 Amdahl定律 18
1.5.2 Gustafson-Barsis定律 20
第2章 多核和并行程序设计 23
2.1 引言 23
2.2 PCAM方法学 24
2.3 分解模式 26
2.3.1 任务并行 27
2.3.2 分而治之分解 28
前言
为满足这种需求,本书将介绍目前主流的工具和技术,不仅是各自独立的工具和技术,更重要的是将它们相互结合。书中会提供多平台和程序设计范例(如消息传递和线程)高效结合的实例。顾名思义,“Hybrid”(混合)计算,是高性能计算的一个新趋势,针对百亿亿级的性能需求,使软件有可能扩展到数百万的线程上。
所有章节都包含丰富的示例和实际问题,并比较了不同的设计脚本,重点在于如何使其实际运作起来。那些能使得高效的软件开发区别于徒劳无功的软件开发训练的所有细节,都以有序的形式呈现出来。
本书介绍了从20世纪90年代继承而来的最新的先进工具(例如OpenMP和MPI标准),并包括更前沿的平台,如具有复杂线程管理功能的Qt库,以及具有在不同多核架构(包括CPU和GPU)上配置相同软件功能的Thrust模板库。
我不可能面面俱到地给出多核开发中的所有可用工具。即使是POSIX线程之类的一些行业标准,书中也并未涉及。
本书不仅旨在介绍主流范型(范围从OpenMP的串行代码半自动并行化到用来巩固MPI的显式通信“plumping”)的实例,还要讲解高效的多核软件开发背后的原理,并指导读者进行实践。
本书内容
本书可以分成如下几个逻辑单元,虽然书中没有明确地这样区分。
多核软件的设计概述概述:第1章介绍多核硬件,讨论了一些具有影响力的体系结构范型示例。第1章也介绍了加速比和效率,在评估多核和并行软件时这些是基本的度量方式。1.5节告诉读者如何从多核和众核硬件激动人心的新进展中预测出什么是人们所期待的方法。
第2章讨论可应用于并行和多核软件开发的方法论与设计模式,包括工作分解模式和程序结构模式。
共享内存编程:讨论了两种不同的共享内存并行编程方法——显式并行化和隐式并行化。在显式方面,第3章覆盖了线程和两种最常用的同步机制——信号和monitor。对于通常遇到的设计模式(如生产者–消费者模式和读者–写者模式),均给出了详细解释并应用于一系列示例中。
在隐式方面,第4章介绍了OpenMP标准,该标准的设计使得我们能以最少的工作量将现有串行代码并行化。它可使开发时间大大缩短。该标准还有其他的好处,如解决了循环间存在的依赖。
分布式内存编程:第5章介绍了分布式内存并行编程的事实标准——消息传递接口(MPI)。MPI同多核编程相关,因为它旨在把程序从一个共享内存多核机器上扩展到一个具有上百万节点的超级计算机上。就其本身而言,MPI能够为利用多核机器的多重分解提供基础,以作为独立的虚拟平台。
这部分涉及的特征包括点对点通信和集合通信,也包括单边通信。有一节内容专门针对Boost.MPI库,虽然还未实现全部的功能,但它的确简化了使用MPI的过程。
GPU编程:GPU是把本书内容组织在一起的最初原因之一。以此类推到共享内存编程,这里从两个方面讨论了针对GPU软件开发的问题。一方面是NVIDIA的CUDA中的具体方法,该方法中的内存传输、数据放置和线程执行配置都需要仔细计划。这将在第6章进行介绍。
另一方面是高级的Thrust模板库算法方法,这部分在第7章中讨论。程序设计的类标准模板库(STL-like)方法为Thrust提供了把CPU和GPU平台均作为目标的能力,在本书所介绍的工具中,这是一个独特的特性。
负载均衡:第8章讨论在多核开发中经常被低估的一个方面。一般来说,一旦异构计算资源开始运行,就应该认真考虑负载均衡。举例来说,一个CPU和一个GPU构成这一组资源,我们在满足需求时不能只考虑一群不同机器的集合。第8章简要讨论了Linda语言,这可以被看做动态负载均衡的高级抽象。
书中主要的关注点在静态负载均衡,以及可以用于驱动负载分区和数据通信序列的数学模型。
很多场景中都应用了一种已经得到认可的方法论——可分负载理论(DLT),并且给出了解释。书中还介绍了一个简单的C++库,它实现了部分过去20年中已经发表过的DLT研究结果。
软件和硬件要求
序言
由于功耗墙、散热墙等因素的限制,单纯提升单核处理器的性能已经越来越困难,因此多核/众核架构成为计算机体系结构发展的重要趋势。然而,多核/众核处理器在带来更高计算能力的同时,也增加了并行软件开发、分析和优化的难度。随着多核/众核处理器的普及以及并行计算集群应用的日益广泛,如何编写正确、高效的并行程序已经成为软件开发人员面临的一大挑战,同时并行程序的调试、剖析也日益成为并行软件开发的难题。并行程序开发和优化的本质是实现算法特征向底层硬件架构特征的高效映射,这就对并行软件开发人员提出了更高的要求,他们不仅要了解算法特征,还要对底层架构有着清晰的认识。这无疑增加了并行软件开发的难度。
本书作者Gerassimos Barlas博士是阿联酋沙迦美国大学计算机科学与工程系的教授,其研究方向包括并行算法及并行软件的设计与开发、负载均衡模型框架研究等。Gerassimos Barlas博士具有10年以上的并行软件开发和教学经验,并且在并行与分布式系统的可分负载理论等领域非常活跃。
本书从并行软件的实现、调试、优化和剖析四个方面,详细讨论了当前主要的并行计算关键技术,包括CPU多核编程、分布式内存编程、GPU编程、负载均衡等。同时针对并行软件的开发效率,本书也详细介绍了Qt 线程、Thrust和Boost MPI等库和工具。面对当今异构计算平台的架构特点,书中既讲解了选择合适的工具开发高性能并行软件的步骤和方法,同时提供了大量的实际案例,更加深入地讨论不同编程和优化技术的应用方法。通过阅读本书,读者可以学习:如何使用库或者指令制导方式创建多核应用,如何使用MPI开发运行在分布式内存系统上的应用程序,如何使用CUDA开发高性能GPU程序,如何实现负载均衡,以及如何针对目标多核平台进行程序剖析和调试等。总之,本书作者根据自己多年的并行编程经验,从开发优秀并行软件的本质出发,以通俗易懂的方式对最为关键的基本知识和技术进行了细致讲解。本书既可成为并行软件初学者的参考书籍,也可供具有一定并行编程经验的软件开发人员参考。
由于时间仓促,而且书中某些术语目前业界没有统一译法,所以我们对一些术语采取了保留其英文名称的方法。书中翻译方面的错误和不妥之处,恳请广大读者不吝批评指正。
译者