MPI程序设计.pdf

MPI程序设计.pdf

ID:47994665

大小:442.02 KB

页数:28页

时间:2020-01-11

MPI程序设计.pdf_第1页
MPI程序设计.pdf_第2页
MPI程序设计.pdf_第3页
MPI程序设计.pdf_第4页
MPI程序设计.pdf_第5页
资源描述:

《MPI程序设计.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、《并行算法设计及性能优化》第2章MPI程序设计MPI(MessagePassingInterface,消息传递接口)是一种消息传递编程模型。消息传递指用户必须通过显式地发送和接收消息来实现处理器间的数据交换。在这种并行编程中,每个控制流均有自己独立的地址空间,不同的控制流之间不能直接访问彼此的地址空间,必须通过显式的消息传递来实现。这种编程方式是大规模并行处理机(MPP)和机群(Cluster)采用的主要编程方式。由于消息传递程序设计要求用户很好地分解问题,组织不同控制流间的数据交换,并行计算粒度大,特别适合于大规模

2、可扩展并行算法。MPI是基于进程的并行环境。进程拥有独立的虚拟地址空间和处理器调度,并且执行相互独立。MPI设计为支持通过网络连接的机群系统,且通过消息传递来实现通信,消息传递是MPI的最基本特色。1.1MPI的含义及功能作为缩写的MPI具有两种含义:MPI是一种标准或规范的代表,而不特指某一个对它的具体实现,并成为这种编程模型的代表和事实上的标准。迄今为止,所有的并行计算机制造商都提供对MPI的支持,可以在网上免费得到MPI在不同并行计算机上的实现,一个正确的MPI程序可以不加修改地在所有的并行机上运行。MPI

3、是一个库,而不是一门语言。MPI库共用三百多个函数调用,可以被Fortran77/90和C/C++调用,从语法上说,它遵守所有对库函数/过程的调用规则,和一般的函数/过程没有什么区别。目前MPI最新的标准是3.0版。MPI只规定了标准并没有给出实现,目前主要的实现有OpenMPI、Mvapich和MPICH,MPICH相对比较稳定,而OpenMPI性能较好,Mvapich则主要是为了Infiniband而设计。1.1.1MPI功能MPI主要用于分布式存储的并行机,包括所有主流并行计算机。但是MPI也可以用于共享存储的

4、并行机,如多核微处理器。编程实践证明MPI的可扩展性非常好,其应用范围从几个机器的19《并行算法设计及性能优化》第2章小集群到工业应用的上万节点的工业级集群。MPI已在MSWindows上、所有主要的Unix/Linux工作站上和所有主流的并行机上得到实现。使用MPI作消息传递的C或Fortran并行程序可不加改变地运行在使用这些操作系统的工作站、以及各种并行机上。MPI既可用于功能分解,也可以用于数据分解,是一个比较通用的基于CPU的并行编程模式,MPI3.0加入了异构并行计算的内容(MPI调用可以传入指向加速器存

5、储器地址的指针)。MPI支持SPMD编程模式,在MPI程序中定义的变量,只要不是在进程id块内定义,它在每个进程内都有一份拷贝。在运行时,由于具体的运行进度不一致,使得各个进程存储空间内的变量值可能不一致,在必要的时候要使用存储器栅栏来保证存储器的一致性,这点要特别注意。1.1.2错误处理宏目前MPI实现提供了C/C++/Fortran语言的接口,分别在mpi.h/mpif.h头文件中。本文只关注于其C接口。除了有限的几个。MPI中所有的函数以MPI开头,单词之间用下划线连接且首单词首字母大写。MPI的每个函数的返回

6、值都是错误码,利用它和MPI_Error_string(int,char*,int*)可以获得错误的字符串描述。为了方便的检查错误,本节在头文件MPIUtil.h中设计了一个宏以检测MPI函数的返回值,代码如下所示。#pragmaonce#include#include"mpi.h"#definecheckMPIError(errno){if(MPI_SUCCESS!=errno){charMPIErrorString[8096];intrl;MPI_Error_string(errno,M

7、PIErrorString,&rl);\printf("file=%s,line=%d,error=%s",__FILE__,__LINE__,MPIErrorString);}20《并行算法设计及性能优化》第2章}1.2基本的MPI函数本节主要介绍一些启动、结束并行环境、获取体系处理器及进程信息的函数、以及如何运行MPI程序。1.2.1启动结束MPI并行环境函数MPI_Init启动MPI并行环境,它意味着并行代码的开始。在MPI_Init之前除了MPI_Initated不能调用任何MPI函数。而MPI_F

8、inalize函数结束MPI并行环境,此后除了主进程外再无进程运行,在两者之间的代码区都由多个进程并行执行,在MPI_Finalize之后也不能调用任何MPI函数。这两个函数的原型如下:#includeintMPI_Init(int*argc,char***argv);intMPI_Finalize(void);MPI_Init有

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。