1,并行计算简介
并行计算的定义:
并行计算是指同时对多个任务或多条指令、或对多个数据项进行处理。完成此项处理的计算机系统称为并行计算机系统,它是将多个处理器(可以几个、几十个、几千个、几万个等)通过网络连接以一定的方式有序地组织起来(一定的连接方式涉及网络的互联拓扑、通信协议等,而有序的组织则涉及操作系统、中间件软件等)。并行计算的主要目的:一是为了提供比传统计算机快的计算速度;二是解决传统计算机无法解决的问题。
同义词:高性能计算、超级计算等
并行计算的研究内容
主要包括并行计算机的设计,有效算法的设计,评价并行算法的方法,并行计算机语言,并行编程环境与工具,并行程序的可移植性及并行计算机的自动编程。本教程为并行计算入门实践教程,主要为并行算法的设计及并行编程环境与工具的实践。其余内容课参考相关文献。
2.1并行计算平台
2.1.1并行计算机的控制结构
对并行计算机的分类有多种方法,其中最著名的是1966年由M.J.Flynn提出的分类法,称为Flynn分类法。Flynn分类法是从计算机的运行机制进行分类的。首先作如下定义:
指令流(instruction stream):机器执行的指令序列;
数据流(data stream):由指令流调用的数据序列,包括输入数据和中间结果。
Flynn根据指令流和数据流的不同组织方式,把计算机系统的结构分为以下四类:
(1)单指令流单数据流(Single Instruction stream Single Data stream, SISD);
(2)单指令流多数据流(Single Instruction stream Multiple Data stream, SIMD);
(3)多指令流单数据流(Multiple Instruction stream Single Data stream, MISD);
(4)多指令流多数据流(Multiple Instruction stream Multiple Data stream, MIMD)。
SISD就是普通的顺序处理的串行机。SIMD和MIMD是典型的并行计算机。MISD在实际中代表何种计算机,也存在不同的看法,甚至有学者认为根本不存在MISD。有的文献把流水线结构的计算机看成MISD结构。
在一台SIMD计算机中,有一个控制部件(又称为控制单元,control unit)和许多处理单元(processing unit)。大量的处理单元通常构成阵列,因此SIMD计算机有时也称为阵列处理机。
在MIMD计算机中没有统一的控制部件。在MIMD中,各处理器可以独立地执行不同的指令。实际上,在SIMD机中,各处理单元执行的是同一个程序,而在MIMD机上,各处理器可以独立执行不同的程序。在MIMD中,每个处理器都有控制部件,各处理器通过互连网络进行通信。MIMD结构比SIMD结构更加灵活。SIMD计算机通常要求实际问题包含大量的对不同数据的相同运算(例如向量运算和矩阵运算)才能发挥其优势。而MIMD计算机则无此要求,它可以适应更多的并行算法,因此可以更加充分地开掘实际问题的并行性。SIMD所使用的CPU通常是专门设计的,而MIMD可以使用通用CPU。后面将会介绍各种MIMD计算机。
随着并行计算技术的不断发展,近来又出现了SPMD,MPMD等概念。SPMD是指单程序多数据(Single Program Multiple Data),MPMD是指多程序多数据(Single Program Multiple)。在SPMD机制中,各处理器有自己的控制部件。各处理器并行地执行同一个程序,但所操作的数据不一定相同。与相比SIMD,在SPMD模式下,各处理器只在需要时进行同步,而不是同步地执行每一条指令。在某一时刻,不同的处理器执行的指令可能不相同。SPMD易于在机群系统和MPI(一种并行编程环境)的支持下得以实现,因此被广泛使用。
2.1.2地址空间
从地址空间的角度,可以将并行计算机分为两类:消息传递体系结构和共享地址空间体系结构。
消息传递体系结构 在消息传递结构的并行机中,通常每个处理器有自己的存储器。该存储器只能被该处理器访问而不能被其它处理器直接访问,因此这种存储器通常称为局部存储器或私有存储器。当处理器 需要向处理器 传送数据时, 把被传送的数据以消息的形式发送给 。典型的消息传递结构的并行机有Cosmic Cube, Paragon XP/S, iPSC, CM-5和nCUBE 2。
共享地址空间体系结构 在共享地址空间体系结构的并行机中,通过硬件支持,使得系统中只有唯一的一个地址空间,所有的处理器共享该地址空间。
请注意,共享地址空间并不意味着系统中必须存在一个在物理上共享的存储器。共享地址空间可以通过一个物理上共享的存储器来实现,也可以通过分布式存储器来实现。在某些并行系统中,存储器分布在各结点内,通过硬件和软件的方法维护一个单一的地址空间。当处理器要访问不在本结点内的内存时,由系统硬件和软件为它找到所需访问的内存。
采用消息传递结构的MIMD计算机又称为多计算机(multicomputers),采用共享地址空间结构的MIMD计算机又称为多处理器(multiprocessors),一般来说共享地址空间体系结构效率更高,但是由于多台机器共享地址空间,地址空间难以管理。随着并行机结构的发展,多处理机和多处理器的界限已不十分清晰,很难严格区分。
3,并行算法简介
并行程序必须以某种形式给出任务的并行性,以下是常见的几种并行形式
3.1.1数据并行
此种并行形式较为简单,比如要进行矩阵的加法
A, B,C两个矩阵均为m × n的矩阵,计算
C = A + B
由矩阵的加法的性质可以知道C(i,j)只和A(i,j)及B(i,j)有关而与A,B中的其它的数据无关,因此C的每个元素的操作都是一次加法,只是操作数不同而已,而且,每个元素的计算都是独立的,它们可以并行执行。 这种类型的并行性表现为:并行的在不同的数据上进行相同的操作,称为数据并行性。
3.1.2任务并行
只要所有必需的子任务已经完成,后续子任务就可以进行,因此,通常来说,很多的子任务都可以并行的执行。这种并行性表现为子任务的并行执行,因此被称为任务并行性。
3.1.3流水并行
流水并行性是指在同一个数据流上同时的执行多个程序(后续的程序处理的是前面程序处理过的数据流)。流水并行性通常也被称为流水线。在流水线上,计算的并行性表现为:每个处理器上运行一个不同的程序,它们构成一个完整的处理流程,每个处理器把自己处理完的数据马上传递给(逻辑上)的下一个处理器。这样实际上形成了处理器间的一个流水线,因此称为流水并行性。
3.1.4混合并行
很多的问题中的并行性表现为数据并行性,任务并行性和流水并行性的混合,某个问题表现出的流水并行性的数量通常独立于问题的规模,而任务和数据并行性则相反,他们通常会随问题规模的增长而增长。通常情况下,任务并行性可以用来开发粗粒度的并行性,而数据并行性用来开发细粒度的并行性,因此,任务并行性和数据并行性的组合可以用来有效的开发应用在大量处理器上的并行算法。