并行计算与MPI

1. 并行计算

1.1. 相关背景

(1)从1986年到2002年,微处理器的性能以平均50%的速度不断提升。但从2002年开始,单处理器的性能提升速度下降到每年大约20%,这个差距是巨大的。所以,从2005年起,大部分主流的CPU制造商决定通过并行处理来快速提升微处理器的性能。
(2)单处理器性能大幅度提升的主要原因之一是日益增加的集成电路晶体管密度。随着晶体管尺寸减小,传递速度增快,集成电路整体的速度也加快,它们的能耗也相应增加,而在21世纪的前10年中,用空气冷却的集成电路的散热能力已经达到极限了,所以,集成电脑制造商的决策是:与其构建更快、更复杂的单处理器,不如在芯片上放置多个相对简单的处理器,这样的有多个处理器的集成电脑称之为多核处理器。
(3)通常我们传统单核处理器上编写的程序无法利用多核处理器,我们需要使得程序充分利用处理器更快的运行程序,更加及时与逼真的模拟现实世界。为了达到这一目的,需要软件开发工程师将串行程序改写为并行程序。

1.2. 什么是并行计算

在这里插入图片描述
并行计算(Parallel Computing)是指同时使用多种计算资源解决计算问题的过程,是提高计算机系统计算速度和处理能力的一种有效手段。它的基本思想是用多个处理器来协同求解同一问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理机来并行计算。并行计算系统既可以是专门设计的、含有多个处理器的超级计算机,也可以是以某种方式互连的若干台的独立计算机构成的集群。通过并行计算集群完成数据的处理,再将处理的结果返回给用户。
并行计算或称平行计算是相对于串行计算来说的。所谓并行计算可分为时间上的并行和空间上的并行。时间上的并行就是指流水线技术,而空间上的并行则是指用多个处理器并发的执行计算。
在这里插入图片描述
并行计算科学中主要研究的是空间上的并行问题。从程序和算法设计人员的角度来看,并行计算又可分为数据并行和任务并行。空间上的并行导致了两类并行机的产生,按照Flynn(弗林)分类法为:单指令流多数据流(SIMD)和多指令流多数据流(MIMD)。我们常用的串行机也叫做单指令流单数据流(SISD)。
在这里插入图片描述
图1 弗林分类法划分的四类计算机
MIMD类的机器又可分为以下常见的五类:并行向量处理机(PVP)、对称多处理机(SMP)、大规模并行处理机(MPP)、工作站机群(COW)、分布式共享存储处理机(DSM)。

1.3. 主要目的

并行计算(parallel computing)是在并行机上,将一个应用分解成多个子任务,分配给不同的处理器,各个处理器之间相互协同,并行地执行子任务,实现如下两个主要目的:
(1)加速求解问题的速度。
(2)提高求解问题的规模。

1.4. 并行计算与分布式计算

并行计算不同于分布式计算(distributedcomputing)。分布式计算主要是指,通过网络相互连接的两个以上的处理机相互协调,各自执行相互依赖的不同应用,从而达到协调资源访问,提高资源使用效率的目的。但是,它无法达到并行计算所倡导的提高求解同一个应用的速度,或者提高求解同一个应用的问题规模的目的。对于一些复杂应用系统,分布式计算和并行计算通常相互配合,既要通过分布式计算协调不同应用之间的关系,又要通过并行计算提高求解单个应用的能力。

1.5. 并行的基本条件

并行计算是在并行机上,将一个应用分解成多个子任务,分配给不同的处理器,各个处理器之间相互协同,并行地执行子任务,从而达到加速求解速度,或者求解应用问题规模的目的。由此,为了成功开展并行计算,必须具备三个基本条件:
(1)并行机。并行机至少包含两台或两台以上处理机,这些处理机通过互连网络相互连接,相互通信。
(2)应用问题必须具有并行度。也就是说,应用可以分解为多个子任务,这些子任务可以并行地执行。将一个应用分解为多个子任务的过程,称为并行算法的设计。
(3)并行编程。在并行机提供的并行编程环境上,具体实现并行算法,编制并行程序,并运行该程序,从而达到并行求解应用问题的目的。

1.6. 主要的并行系统

1.6.1. 共享内存模型

共享内存系统即单机并行,在一台机器上运行程序时分配多个进程或线程来达到加速的目的。比如用OpenMP和Pthreads进行共享内存编程,在程序中加入相关并行语句实现线程的创建和销毁。

OpenMP是由OpenMP Architecture Review Board牵头提出的,并已被广泛接受的,用于共享内存并行系统的多线程程序设计的一套指导性的编译处理方案(Compiler Directive)。OpenMP支持的编程语言包括C语言、C++和Fortran;而支持OpenMp的编译器包括Sun Compiler,GNU Compiler和Intel Compiler等。OpenMp提供了对并行算法的高层的抽象描述,程序员通过在源代码中加入专用的#pragma来指明自己的意图,由此编译器可以自动将程序进行并行化,并在必要之处加入同步互斥以及通信。当选择忽略这些#pragma,或者编译器不支持OpenMP时,程序又可退化为通常的程序(一般为串行),代码仍然可以正常运作,只是不能利用多线程来加速程序执行。
每台电脑的核数,是一个程序中同时运行的最大线程数或进程数(这里的同时指同一时刻,注意区分并行和并发的概念)。例如用OpenMP进行编程,一般情况下如果设置的线程数大于电脑核数是毫无意义的,因为同时运行的线程数只能等于核数,此时多余的线程变为并发运行,这样在线程切换上会浪费更多的时间。
共享内存模型具有如下特性:
(1)在共享编程模型中,任务间共享统一的可以异步读写的地址空间。
(2)共享内存的访问控制机制可能使用锁或信号量。
(3)这个模型的优点是对于程序员来说数据没有身份的区分,不需要特别清楚任务简单数据通信,程序开发也相应的得以简化。
(4)在性能上有个很突出的缺点是很难理解和管理数据的本地性问题。

1.6.2. 消息传递模型

消息传递模型有以下特征:
(1)计算时任务集可以用他们自己的内存。多任务可以在相同的物理处理器上,同时可以访问任意数量的处理器。
(2)任务之间通过接收和发送消息来进行数据通信。
(3)数据传输通常需要每个处理器协调操作来完成。例如,发送操作有一个接受操作来配合。

1.6.3. 数据并行模型

数据并行模型有以下特性:
(1) 并行工作主要是操纵数据集。数据集一般都是像数组一样典型的通用的数据结构。
(2)任务集都使用相同的数据结构,但是,每个任务都有自己的数据。
(3)每个任务的工作都是相同的,例如,给每个数组元素加4。
(4)在共享内存体系结构上,所有的任务都是在全局存储空间中访问数据。在分布式存储体系结构上数据都是从任务的本地存储空间中分离出来的。

1.6.4. 对比分析

在当前并行机上,比较流行的并行编程环境的典型代表、可移植性、并行粒度、并行操作方式、数据存储模式、数据分配方式、学习难度、可扩展性等方面的比较在下表中给出。
表1 两种并行编程环境主要特征一览表
特征 典型代表 可移植性 并行粒度 并行操作方式 数据存储模式 数据分配方式 学习入门难度 可扩展性
消息传递 MPI、PVM 所有流行并行机 进程级大粒度 异步 分布式存储 显式 较难 好
共享存储 OpenMP SMP﹑DSM 线程级细粒度 异步 共享存储 隐式 容易 较差
数据并行 HPF SMP﹑DSM﹑MPP 进程级细粒度 松散同步 共享存储 半隐式 偏易 一般
由该表可以看出:
(1)共享存储并行编程基于线程级细粒度并行,仅被SMP 和DSM并行机所支持,可移植性不如消息传递并行编程。但是,由于它们支持数据的共享存储,所以并行编程的难度较小,但一般情形下,当处理机个数较多时,其并行性能明显不如消息传递编程。
(2)消息传递并行编程基于大粒度的进程级并行,具有最好的可移植性,几乎被当前流行的各类并行机所支持,且具有很好的可扩展性。但是,消息传递并行编程只能支持进程间的分布存储模式,即各个进程只能直接访问其局部内存空间,而对其他进程的局部内存空间的访问只能通过消息传递来实现。因此,学习和使用消息传递并行编程的难度均大于共享存储和数据并行两种编程模式。

2. MPI

2.1. 什么是MPI

多线程是一种便捷的模型,当中每一个线程都能够訪问其他线程的存储空间。因此,这样的模型仅仅能在共享存储系统之间移植。一般来讲,并行机不一定在各处理器之间共享存储,当面向非共享存储系统开发并行程序时,程序的各部分之间通过来回传递消息的方式通信。要使得消息传递方式可移植,就须要采用标准的消息传递库。这就促成的消息传递接口(Message Passing Interface, MPI)的面世,MPI是一种被广泛采用的消息传递标准。
MPI是一种基于消息传递的跨语言的并行编程技术,支持点对点通信和广播通信。消息传递接口是一种编程接口标准,而不是一种详细的编程语言。简而言之,MPI标准定义了一组具有可移植性的编程接口。各个厂商或组织遵循这些标准实现自己的MPI软件包(如链接库等形式),典型的实现包含开放源码的MPICH、LAM MPI以及不开放源码的Intel MPI。因为MPI提供了统一的编程接口,程序员仅仅须要设计好并行算法,使用对应的MPI库就能够实现基于消息传递的并行计算。MPI支持多种操作系统,包含大多数的类UNIX和Windows系统。
MPI概念的要点如下:
(1)MPI是指Message Passing Interface,消息传递接口,是一个由专家、工业界和学术界组成的大型的委员会定义的一套标准;
(2)MPI 1.0 版于1994 年推出,并同时获得了各并行机产商的具体实现;MPI 2.0 版于1998 年10 月推出;
(3)MPI是一种消息传递编程模型,MPI的实现为并行应用提供消息传递或者相关的服务,并且成为了消息传递编程模型的代表和事实上的标准;
(4)MPI是一种标准或者规范,目前存在对多种MPI标准的实现;
(5)MPI标准定义了一组接口函数,使应用程序可以将消息从一个MPI进程送到另一个MPI进程。 MPI实际上定义了比消息传递更多的服务,但是其核心和灵魂还是MPI进程间的消息传递。

剩余内容详见

https://download.csdn.net/download/tomjchan/11221152

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值