Linux环境下MPI并行编程与算法实现研究
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
287个调用接口,但MPI所有的通信功能可以用它的 一或二者的组合。并行程序设计的两种基本模式可
6个基本调用来实现,也就是说可以用这6个基本调 概括出程序各个部分的关系。对等模式中程序的各
用来完成基本的消息传递并行编程。
个部分地位相同,功能和代码基本一致,只是处理的
1)MPI初始化:MPI-IN n.()是MPI程序的第一个 数据或对象不同。而主从模式体现出程序通信进程
所谓组通信是指涉及到一个特定组内所有进程 都参加全局的数据处理和通信操作。组通信由哪些 进程参加以及组通信的上下文,都是该组通信调用的 通信域限定的。组通信一般实现三个功能:通信、同 步、计算:通信功能主要完成组内数据的传输,同步功 能组内所有进程在特定的点上取得一致,计算功能要 对给定的数据完成一定的操作。组通信操作基本可 以分成三个类型:数据移动、聚集、同步。
城。MPI是一种消息传递编程模型并可以被广泛使用的编写消息传递程序的标准,已扩展为一种
优秀的并行程序设计语言。该文简要介绍了有关并行编程的基本概念与方法,深入讨论了MPI并
行鳊程环境与并行编程模式,对MPI并行性进行了分析。蛤出了Lin峨环境下MPI编程环境的配置
方法,最后结合一个实例详细描述了用MPI实现并行算法的方法。通过对实验程序的结果分析。在
6)消息接收:MPI—RECV(b、lf,count,datatype, source,tag,comm.status)从指定的进程80urce接收消 息,并且该消息的数据类型和消息标识和本接收进程 指定的data呻_e和“喀相一致,接收到的消息所包含的 数据元素的个数最多不能超过couIlt。status是一个返 回状态变量,它保存了发送数据进程的标识、接收消 息的大小数量、标志、接收操作返回的错误代码等信 息。接收到的消息的源地址、标志以及数量都可以从 变量s£atus中获取,如在C语言中,通过对status.MPI— SOURCE,status.MPI—TAG,status.MPI—ERROR弓I用, 可以得到返回状态中所包含的发送数据进程的标识, 发送数据使用的tag标识和本接收操作返回的错误代 码。
1 MPI组成
MPI是一种消息传递编程模型并可以被广泛使用 的编写消息传递程序的标准。它由一组库函数组成, 在FortraIl或C的基础上扩展为一种并行程序设计语 言。严格来说,MPl只是一个库,提供了应用程序的编 程接口,方便Fortran77/90或C/C++等编程语言直 接对这些库例程或函数进行调用,实现进程间通信。 1.1 MPI数据类型
为了提供给用户一个良好的并行编程环境,很多 厂商开发了有自己特色的支持平台,如IBM公司的 EUI、Intel的Nx、橡树岭的PVM等,这些平台都是开 发出各自专有的消息传递包或消息传递库,提供了相 似的功能,并且在特定的平台上具有优越的性能,缺 点是在应用程序一级上互不兼容,可移植性很差。基 于机群系统的并行编程环境的特点是一个消息传递 模型,各个并行执行的程序之间通过传递消息来交换 信息、协调同步。消息传递是相对于进程问通信方式 而言的,而且与具体并行机存储模式无关,任何支持 进程间通信的并行机,均可支持消息传递并行程序设 计。为了开发一个高效标准具有可移植性的消息传 递库,1992年由IBM、Intel公司、Parasoft等开发商、
1)数据移动 a)广播(MPI—BCAST):标识为root的进程向通 信域内所有进程(含自身)发送相同消息; b)收集(MPI—GATHER):标识为root的进程(含 自身)从n个进程中的每一处接收一个私人化的消 息,这n个消息以排序的次序结合在一起存入mot进 程的接收缓冲区中; c)散射:(MPI—SCATTER)散射操作与收集操作 相反,mot进程向n个进程中的每一个(包括自身)发 送一个私人化的消息。对于所有非mot进程,消息发 送缓冲区被忽略; d)组收集(MPI—ALLGATHER):相当于通信域内 每个进程作为mot进程执行一次收集调用操作,既每 个进程都收集到了其他进程的数据。
收稿日期:2004一03.25 作者简介:曾志峰(1963一),女,湖南怀化人,副教授,主要研究方向为并行与分布式计算、网络安全技术。
万方数据
·62·
航空计算技术
第34卷第2期
INT等),这些与语言中的数据类型相对应。MPI除了 不同的进程通过这一调用得知在给定的通信域中一
可以发送或接收连续的数据之外,还可以处理不连续 的数据,如多维向量或类C语言中的结构数据类型。
共有多少个进程在并行执行。
5)消息发送:MPI—SEND(buf,count,dat8呻e,
为了发送不连续的数据,MPI定义了打包(pack)与解 包(unpack)操作,在发送前显式地把数据包装到一个
dest,tag,comm):MPI—SEND将发送缓冲区buf中的
count个dat8帅e数据类型的数据发送到目的进程
1)标准通信模式:由MPI根据系统当前的状况 选择缓存发送或者同步发送方式来完成发送,当然缓 冲是需要付出代价,它会增加通信时间,占用缓冲区 等。
2)缓存通信模式:缓冲发送是假设有一定容量的 数据的缓冲区空间可以使用,发送操作可在相应的接 收操作前完成,其完成则发送缓冲区可重用,但数据 的发送其实没有真正的完成,而是把发送数据立即存 入系统缓冲区中等待相应的接收操作发生并完成。
连续地缓冲区,在接收之后再从连续缓冲区中解包。 dest,tag是个整型数,它表明本次发送的消息标志,使
MPI还允许发送和接收不同的数据类型,使得数据重 映射方便灵活。通过使用不同的数据类型调用MPI—
用这一标志,就可以把本次发送的消息和本进程向同 一目的进程发送的其他消息区别开来。MPI—SEND操
e)全交换(MPI—AIJ肿ALL):每个进程向通信域
内n个进程的每一个(包括自身),发送一个私人化的
消息。 2)聚集 a)规约(MPI—REDuCE):将组内所有的进程输
入缓冲区中的数据按给定的操作OP进行运算,并将 起始结果返回到r00t进程的接收缓冲区中。OP为规 约操作符,MPI预定义了求最大值、求和等规约操作。
调用,它完成MPI程序所有的初始化工作,也是MPI 之间的一种主从或依赖关系。并行算法是并行计算
程序的第一条可执行语句。
的核心,用MPI实现并行算法,这两种基本模式基本
2)MPI结束:MPI—FINAuzE()是MPI程序的最 上可以表达用户的要求,对于复杂的并行算法,在MPI
后一个调用,它结束MPI程序的运行。也是所有MPI 中都可以转换成这两种基本模式的组合或嵌套。
b)扫描(MPI—scAN):扫描操作要求每一个进程 对排在它前面的进程进行规约操作,结果存人自身的 输出缓冲区。
3)同步通信模式:采用同步通信模式的开始并不 依赖于接受进程相应的接受操作是否已经启动,但在 相应的接受操作未开始之前,发送不能返回。当同步 发送返回后,意味着发送缓冲区的数据已经全部被系 统缓冲区缓存,并且已经开始发送,发送缓冲区也可 以被释放或重新使用。
4)就绪通信模式:发送操作仅在相应的接收操作 发生后才能发生,其完成后则发送缓冲区可以重用, 它不需要同步方式那样的等待。 2.3组通信
第34卷第2期 2004年6月
航空计算技术
Aeronautical Computer 7rechnique
V01.34 No.2 Jun.2004
“nuБайду номын сангаас环境下MPI并行编程与算法实现研究
曾志峰
(怀化学院计算机系,湖南怀化418008)
摘要:并行计算实现求解一些复杂的问题,并行编程技术的进步使得并行计算逐步应用到很多领
为了支持异构环境和易于编程,MPI定义了精确 的数据类型参数而不使用字节计数,以数据类型为单 位指定消息的长度,这样可以独立于具体的实现,并 且更接近于用户的观点瞄J。对于C和F0rtraJl。MPI均 预定义了一组数据类型(如MPIJNT、MPI—DOuBLE 等)和一些附加的数据类型(如MPI—LONG—LONG一
程序的最后一条可执行语句。
2.2点对点通信模式
3)获取当前进程标识:MPI—COMM—RANK
(comm,mk)返回调用进程在给定的通信域中的进程
标识号,有了这一标识号,不同的进程就可以将自身
在点对点通信中,MPI提供了两类发送和接收机 制:阻塞和非阻塞。阻塞发送完成的数据已经拷贝出 发送缓冲区,即发送缓冲区可以重新分配使用,阻塞
和其他的进程区别开来,实现各进程的并行和协作。 指定的通信域内每个进程分配一个独立的进程标识
接受的完成意味着接收数据已经拷贝到接收缓冲区, 即接收方已可以使用;非阻塞操作在必要的硬件支持
序号,例如有n个进程,则其标识为O—n一1。 4)通信域包含的进程数:MPI—cOMM—sIzE
(comm,size)返回给定通信域中所包括的进程的个数,
下,可以实现计算和通信的重叠。基于阻塞和非阻塞 的机制,MPI提供了具有以下语义的4种通信模式:标 准通信模式、缓存通信模式、同步通信模式、就绪通信
万方数据
2004年6月
曾志峰:“nu】【环境下MPI并行编程与算法实现研究
·63·
模式。对于非标准通信模式,只有发送操作,没有相 应的接收操作,一般用标准接收操作代替。
其释放。用户也可以在原有通信域的基础上,定义新 的通信域。通信域为库和通信模式提供了一种重要
2 MPI并行编程
的封装机制。
2.1 MPI并行编程模式
1.3 MPI调用接口
MPI具有两种最基本的并行程序设计模式:对等
MPI—l提供了128个调用接口,MPI一2提供了 模式和主从模式,大部分并行程序都是这两种模式之
unu】【机群环境下用MPI实现复杂的并行算法是简单的,并且能取得较好的性能。
关键词:消息传递模型;MPI;通信模式;并行编程
中图分类号:TP311.1
文献标识码:A
文章编号:1671-654x(2004)02.0061.04
引言
以高性能计算平台支撑的大规模并行计算已经 成为计算领域瞩目的焦点。在基于共享内存与分布 内存的并行计算机群等硬件环境下可以求解一大类 复杂的科学与工程计算问题,并行计算编程技术的进 步也使得并行计算已经开始渗透并普及到各个领域 和方面。一个并行处理系统主要由并行平台(操作系 统和硬件)与并行编程和求解应用问题的算法构成。 并行编程又包括并行语言和其他工具、源程序、编译 程序(包括预处理器、汇编程序和连接程序)、自然并 行代码等运行时间支持和其他库。所有这些操作系 统实用程序、程序设计语言、编译器以及运行时间库 等环境工具构成了并行编程环境。
GMP等研究机构和Edinburgh等大学成立了MPI论 坛。MPI论坛于1994和1997年分别推出了MPI一1 和MPI一2标准,提供了一个适合进程间进行标准消 息传递的并行程序设计平台。目前MPI已经发展成 为应用最广泛的并行程序设计平台,几乎被所有并行 计算环境(共享和分布式存储并行机、MPP、机群系统 等)和流行的多进程操作系统(uNⅨ、Linux、windows) 所支持,基于它开发的应用程序具有最佳的可移植 性、功能强大、效率高等多种优点。本文侧重介绍基 于unu)【的MPI编程环境MPICH及其在Pc集群计算 机系统中进行MPI并行编程的主要方法。
sEND,可以发送不同类型的数据,使得MPI对数据的 处理更为灵活。
作指定的发送缓冲区是由count个类型为datatype的 连续数据空间组成,起始地址为buf。
1。2通信域¨1
通信域是MPI的一个关键概念,它以对象形式存 在,作为通信操作的附加参数。通信域为开发消息传 递程序提供了模块化支持,从而强有力地支持开发并 行库和大规模代码。MPIcH中的一个通信域定义了 一组进程和一个通信的上下文,虚拟处理器拓扑、属 性等内容。通信上下文是通信域所具有的一个特性, 它允许对通信空间进行划分,提供了一个相对独立的 通信区域,由系统严格管理,对用户是透明的,有力地 保证了库代码的消息通信互不干扰。MPI—cOMM— wORLD是一个由MPI提供的预定义的通信域,它包 括所有的进程。所有的MPI实现都要求提供MPI— COMM—wORLD通信域,在进程的生命期中不允许将