并行计算机及并行计算环境之初步介绍

同时性和并行性是物质世界的一种普遍属性,具有实际物理背景的计算问题在许多情况下都可以划分成能够并行计算的多个子任务,例如:根据几十个常用应用软件的统计,60%80%的标量计算可以被向量化,而90%左右的串行计算可以并行化。因而,并行计算机成了实现高性能计算、解决挑战性计算问题的希望和途径。本文分两个部分对传统的并行计算做初步介绍:并行计算机及并行计算环境MPI

并行计算机

并行计算机即能在同一时间内执行多条指令(或处理多个数据)的计算机,并行计算机是并行计算的物理载体。1966M.J.Flynn提出了著名的Flynn分类法,根据指令流与数据流方式的不同将计算机系统分类。指令流是指机器执行的指令序列;数据流指指令调用的数据序列,包括输入数据和中间结果。据此,可以把计算机系统分成:

单指令流单数据流SISD(Single Instruction Stream Single Data Stream);

单指令流多数据流SIMD(Single Instruction Strema Multiple Data Stream);

多指令流单数据流MISD(Multiple Instruction Stream Single Data Stream);

多指令流多数据流MIMD(Multiple Instruction Stream Multiple Data Stream);

SISD计算机就是传统的单处理器计算机,指令顺序执行,一次只执行一条指令并且只对一个操作部分分配数据。后三类从广义上来说均属于并行计算机系统,MISD系统在概念上说来可以存在,但这种在指令级并行、数据级串行的系统目前尚无实例。SIMDMIMD是并行计算机开发的主流。

SIMD系统是多个处理单元在同一控制器下工作的计算机系统,系统中各处理单元执行相同的指令流,但作用于不同的数据流上,如向量计算机和阵列计算机均属此类。由于系统在同一控制器的控制下进行工作,各计算部件必须执行相同的指令,就限制了这类系统的应用范围。

MIMD系统则是多个处理机各自执行不同的指令流,并分别作用于不同的数据流上。根据各处理机间耦合程度的不同,MIMD系统又可分为共享存储(Shared Memory)的多处理机系统(Multiprocessor)和分布存储(Distributed Memory)的多计算机系统(Multi-computer)两类。前者各处理机通过总线、开关阵列或多级网络等方式共享一个公共的存储器,分散在各个处理器中的应用程序的各部分之间可以方便地通过共享的存储变量来交换数据并实现各种互斥和同步操作。由于受到存储器带宽的限制,这类共享存储多处理机系统的可扩展性(Scalability)较差,一般很难达到较大的规模和非常高的性能。后者各处理机有自己的局部存储器,构成一个单独的节点,节点之间通过互连网互相连接。每台处理机只能直接访问局部内存,不能访问其它处理机的存储器,它们之间的协调以消息传递的方式进行。它具有很好的扩展性,可以最以限度扩大处理机的数量,是当前解决高性能计算的有效途径。现在并行计算机的主流分布存储的大规模并行机MPP和集群(Cluster)就属于此类型。

20世纪70年代初到现在,出现了各种不同类型的并行机,包括向量机、SIMD计算机和MIMD计算机。随着计算机的发展,曾经风行一时的向量机和SIMD计算机现已退出历史舞台,而MIMD类型的并行机却占了主导地位。

当代的主流并行机是可扩展的并行机,包括共享存储的对称多处理机(SMP)和分布存储的大规模并行机(MPP)与集群(Cluster)。下面对它们的系统结构特点进行分析:

对称多处理机SMP SMPsymmetrical Multi processing)是共享存储的并行机,指在一台计算机上汇集多个CPU,各CPU之间共享内存以及总线结构,可同时处理不同任务的计算机结构如下图。在这种结构中,一台计算机不再由单个CPU组成,而同时由多个处理器运行操作系统的单一副本,并共享内存和其他资源。系统将任务队列对称的分布于多个CPU之上,从而极大的提高了整个系统的数据处理能力。所有的处理器都可以平等的访问内存、I/O和外部中断。

对称多处理器系统的优点是并行化的效率较高,相对容易编写并行程序,容易设计出小粒度、负载平衡、高效的并行程序,延迟较小。其缺点是存储器带宽的增长跟不上处理器速度或存储容量的步伐,扩展性低,一般处理器的数目不超过100个,价格昂贵。

大规模并行机MPP  MPP(Massively  Parallel Processor)是指使用数个拥有独立内存空间的CPU构成的,同时执行一个任务的计算机结构如下图。它由成百上千的功能相同的处理机通过互连网络连接而成,各处理器可以直接访问自己节点内部的存储器,通过消息传递方式获得或传送其他节点的数据。目前的代表机型有Inter 的ParagonXP/SCrayT3D、国产YII3和曙光系列等。

      大规模并行机的优点就是扩展性强,可以不限度的增加处理机的数目。其缺点是难为其开发并行程序,程序员需要根据系统的特点来平衡并行程序的粒度和结点间通信量,价格昂贵,用的都是专用系统配件,专用的互连网络。

  集群(Cluster Cluster是指把两个以上高性能的工作站或高档次PC用通用的网络(如EthernetFDDIATM)连接在一起,并配以相应的支撑软件,构成一个分布式并行计算机系统如下图。它是把多个独立的计算机系统通过高速通信网络互连,统一调度、协调处理,实现高效并行处理的系统。集群并行系统中的每个计算机系统可以称为节点机,每个节点机有自己的存储器和I/O设备,因此集群并行计算系统具有基于网络的分布式资源。

 

与其他并行机相比,集群有以下特点:

1)可扩展性强。只要在网络上增加一台新计算机,就可提高系统能力,处理能力容易扩展,可以不受限的增加。

2)系统结构灵活:将不同性能的工作站使用不同的体系结构和各种互连网络构成同构或异构的工作站机群系统,从而弥补单一体系结构适应面窄的弱点,可更充分地满足各类应用要求。

3)易于实现。只需将现成的计算机系统用高速通信网络连接起来就可构成集群并行系统。

4)最小化资源竞争。通过最小化共享资源达到减少由资源竞争带来地系统干扰,减少系统由于资源竞争引起地效率下降。

5) 可充分利用分散的计算资源。因为工作站本身就是一台单独可用的计算机,当工作站闲置时就可用于加载并行计算任务,而且这样也会降低投资风险。

6)性能/价格比高。据美国Oak Ridge国际实验室的一组实用并行程序测试,由11IBM RS/6000工作站组成的并行系统的浮点运算速度可以达到07Gflops。这个运算速度已经接近某些巨型机的速度,但价格却远远低于巨型机系统。

因而,强大的计算能力和相对低廉的价格使得集群系统在大规模科学与工程机算中占据了主要地位。199711Top500列表中只有一个集群系统,而到了20047月,这个数目激增到291,约占58.2%,而且这种趋势还将继续。

并行计算环境MPI

MPI 是英文Message Passing Interface 的缩写, 是基于消息传递编写并行程序的一种用户界面。它提供了一种与语言和平台无关,可以被广泛使用的编写消息传递程序的标准。 MPI吸取了众多消息传递系统的优点,以语言独立的形式来定义这个接口库, 并提供了与CFortranJava语言的绑定. 这个定义不包含任何专用于某个特别的制造商、操作系统或硬件的特性. 由于这个原因, MPI在并行计算界被广泛地接受。它几乎被所有并行计算环境(共享和分布式存储并行机、MPP、机群系统等)和流行的多进程操作系统(UnixWnidows)所支持,基于它开发的应用程序具有最佳的可移植性。MPI是目前高效率的超大规模并行计算(1000个处理器)最可信赖的平台,工业、科学与工程计算部门的大量科研和工程软件(气象、石油、地震、空气动力学、核能等)目前已经移植到MPI平台,发挥了重要作用。现已成为目前国际上最流行的并行编程环境之一

MPI的定义是多种多样的,但不外乎下面三个方面。它们限定了MPI的内涵和外延

1MPI是一个库,而不是一门语言。许多人认为MPI就是一种并行语言,这是不准确的。但是按照并行语言的分类,可以把FORTRAN+MPIC+MPI看作是一种在原来串行语言基础之上扩展后得到的并行语言。MPI库可被FORTRAN77/C/Fortran90/C++调用。从语法上说,它遵守所有对库函数/过程的调用规则,和一般的函数/过程没有什么区别。

2MPI是一种标准或规范的代表,而不特指某一个对它的具体实现。迄今为止,所有的并行计算机制造商都提供对MPI的支持,可以在网上免费得到MPI在不同并行计算机上的实现。一个正确的MPI程序可以不加修改地在所有的并行机上运行。

3MPI是一种消息传递编程模型,并成为这种编程模型的代表和事实上的标准。MPI虽然很庞大,但是它的最终目的是服务于进程间通信这一目标的。 

  作为一种有效的、容易理解的编程模型,消息传递模型已被广泛的应用到并行计算中,同时也产生了许多消息传递系统工具,如P4PVMExpress等。虽然在通过消息完成进程间通信的底层概念上这些系统是相同的,但在语法和精确的语义方面,它们之间又有着很大的差异。这急需要一种统一的标准对其他进行规范。在这种背景下,MPI产生了。

  许多组织对MPI标准的建立作出了贡献,这些组织主要来自美国和欧洲,大约有60位代表,分属40多个不同的单位,包括了并行计算机的多数主要生产商以及来自大学、政府、实验室和工厂的研究人员。

MPI的标准化开始于1992年在威吉尼亚的威廉姆斯堡召开的分布存储环境中消息传递标准的讨论会,由DongarraHempelHeyWalker建议的初始草案于199211月推出,并在19932月完成了修订版,就是MPI1.019956月推出的MPI1.1对原来的MPI作了进一步的修改、完善和扩充。

但是当时推出MPI标准时,为了能够使它尽快实现并迅速被接受,许多需要但实

现起来比较复杂的功能都没有定义,比如并行I/O。当MPI被广泛接受之后,扩充并提高MPI功能的要求就越来越迫切了。于是在1997年的7月,在对原来的MPI作了重大扩充的基础上,又推出了MPI的扩充部分MPI2,而把原来的MPI各种版本称为MPIlMPI-2的扩充很多,但主要是三个方面:动态进程管理、远程存储访问和并行I/O

  由于MPI是一个库而不是一门语言,因此对MPI的使用必须和特定的语言结合起来进行。FORTRAN是科学与工程计算的领域语言,而C又是使用最广泛的系统和应用程序开发的语言之一,因此对FortranC的支持是必须的。

因此在MPI-1中明确提出了MPIFortran77C语言的绑定,并且给出了通用接口和针对Fortran77C的专用接口说明。MPI-1的成功说明MPI选择的语言绑定策略是正确和可行的。在MPI-2中除了和原来的Fortran77C语言实现绑定之外,进一步与Fortran90C++结合起来提供了四种不同的接口,为编程者提供了更多选择的余地。

到目前为止,已经有很多厂商和研究机构都实现了MPI标准,拥有自己的MPI程序运行系统,大致分为两类:建立在厂家专用的环境之上MPI实现如IBM SP2POE/MPL,Intel ParagonOSF/Nx等。

 MPI 提供两种数据传输机制:阻塞式(blocking)和非阻塞式(non-blocking) 通信。阻塞式通信调用可以保证资源安全的重复使用,诸如缓冲区(包括接收缓冲区、发送缓冲区等)的使用。这种方式简化了通信握手和资源轮询的繁琐过程。而非阻塞式通信调用则允许通信和计算的叠加。在适当硬件的支持下,数据复制可以与通信同时进行。然而,非阻塞式调用的返回却不能保证资源的再利用。

阻塞式和非阻塞式调用都可以实现以下的通信方式:标准型(standard )、缓冲型(buffered)、同步型(synchronous)和就绪型(ready)。

 

在消息传递编程模型中,而传递原语中,消息的大小是一个很重要的参数,以往的编程平台要求程序员给出消息的总字节数以确定消息的大小,但由于异构机在表示同一类型的数据时,所采用的机器字长可能是不一样的,这样就不可避免地给消息传递带来问题,即表示相同类型的同样个数的数据所占缓冲区内存总字节数随机器的不同而变化,从而使得并行程序对硬件有极强的依赖性,在程序移植时,用户不仅需要深入了解机器特性,还有可能需要修改每一条消息传递原语,不利于并行程序的交流及并行计算技术的推广。

MPI针对上述问题MPI 预定义了它的数据类型。MPI 的编程者也可以构造自己的派生数据类型。当这些数据类型在同构的分布式并行环境之间通信时,不需要数据的转换就可以直接使用,在异构的计算机群之间通信还需要用位(Byte)传输,然后进行数据的转换才可以实现不同体系结构计算机之间的通信,这时要用到MPI_BYTE MPI_PACKED两个函数调用。Fortran C 语言中不同的数据类型在MPI 标准中有不同的表示:

MPI支持的数据类型

MPI C data types

MPI Fortran data types

MPI_CHAR

signed char

MPI_CHARACTER

Character(1)

MPI_SHORT

signed short int

 

 

MPI_INT

signed int

MPI_INTEGER

integer

MPI_LONG

signed long int

 

 

MPI_UNSIGNED_CHAR

unsigned char

 

 

MPI_UNSIGNED_SHORT

unsigned short int

 

 

MPI_UNSIGNED

unsigned int

 

 

MPI_UNSIGNED_LONG

unsigned long int

 

 

MPI_DOUBLE

double

MPI_REAL

real

MPI_FLOAT

float

MPI_DOUBLE_PRECISION

double precision

MPI_LONG_DOUBLE

long double

 

 

 

 

MPI_COMPLEX

complex

 

 

MPI_LOGICAL

logical

MPI_BYTE

8 binary digits

MPI_BYTE

8 binary digits

MPI_PACKED

用于MPI数据打/解包

MPI_PACKED

用于MPI数据打/解包

 

MPI的一个关键特征就是通信集(Communicator)通信集表明通信的上下文,或者说是通信在哪些进程之间进行是合法的,保证不同的通信集之间的通信不互相干扰。MPI中,进程以组内的相对序列号rank来标识,如果没有编程者的明确指定,MPI 有一个缺省的通信集的名字MPI_COMM_WORLD ,这个通信集是预先定义的。通信集参数则说明所涉及的进程组,使用该通信子的通信操作限制在该进程组的进程之间。这样,一组进程集上的库代码被用于另一组进程集时,库代码无需改动,而只要重新定义描述该进程集的通信集。每一个通信集定义了一个唯一的进程组通信上下文。由上下文和区别消息的标志一起来进一步区别不同进程上下文的具有同一个标识的消息。上下文由系统严格管理,对用户是透明的,有力地保证了库代码的消息通信互不干扰。

MPICH一种最重要的MPI实现, 也是最著名、应用最广泛的。它由Argonne国家实验室和密西西比州立大学(Mssissiippi State Unviersity)共同开发的开放源代码软件。目前MPICH的最新版本是MPICH-2.1.x ,常用版本是MPICH1.2.x, 它支持部分的MPI-2的特征。本文研究的就是在MPICH1.2.x基础上构建的并行计算环境容错。

MPICH的优点就是在可移植性和性能这两个方面得到最好的平衡。MPICH几乎可以运行在几乎所有的硬件平台,如MPPSMP、集群系统等;而且在不同的软件平台,如unixLinuxSun0SHP-uxWindowsNT等,都有可用的版本。

这些皆得益于MPICH的层次结构。它将不同性质的功能在不同层次实现,将不同性质的代码在不同层次实现,回避了可移植性和性能的冲突点,将二者的实现分离开来。MPICH的分层的界面的标准在于硬件平台的独立性。因为,一方面MPI标准中的接口定义都是平台无关的,另一方面要实现MPI标准必须以具体的平台为基础,所以代码很自然的就有两种不同的属性。

MPICH的最上层就是MPI的标准接口,供用户调用的API;它主要由集合通信(collective communication)函数组成,它们通过点对点函数实现。如:MPI_SendMPI_RecvMPI_Scatter等。

中间层在MPICH中被称为抽象设备层(ADI),它的功能是指定欲发送或接收的消息、数据的传输、消息队列的管理和提供运行环境信息。ADI一方面将代码按照与硬件无关和与硬件有关的原则分开,另一方面又充当着二者的纽带,完成功能映射,因而ADI之上的所有代码都是独立于硬件平台的,可以被各种系统共享,ADI之下就是各种平台相关的实现方法。ADI可以直接在网络接口层面上实现,也可以通过下一层接口实现。MPICH采用的是后一种方法,它充分利用了消息传递系统P4。它的接口函数通常有MPID_InitMPID_SendDatatypeMPID_SendContigMPID_RecvDatatype等。

     底层则是与特定通信环境相关的接口,例如工作站机群上的p4通信库、曙光1000上的NX库、曙光3000上的BCL通信库等

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值