版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、MPI简介MPI及其历史消息传递接口(Message Passing Interface,简称MPI)是一种编程接口标准,而不是一种具体的编程语言。由消息传递接口论坛(Message Passing Interface Forum,简称MPIF)发起讨论并进行规范化的。MPI标准如今已经成为事实意义上的消息传递并行编程标准,也是最为流行的并行编程接口。MPI标准定义了一组具有可移植性的编程接口。典型的实现包括开源的MPICH、LAM MPI以及不开源的INTEL MPI。MPICH由美国Argonne国家实验室开发,影响最大、用户最多的MPI实现开源与MPI标准同步发展支持多程序多数据编程和异
2、构集群系统支持c/c+,fortran 77和fortran 90。支持类UNIX和windows NT平台支持环境广泛,包括多核、SMP、集群和大规模并行计算系统软件包继承了并行程序设计环境组件Intel MPI提供Direct Access Programming Library (DAPL) 中间层支持,有效的支持多种高性能互联系统透明的支持TCP/IP、共享内存优点:无需对通信协议的选择进行额外设置,可以自动选择MPI间最快的传输协议MPI程序特点消息传递指的是并行执行的各个进程具有自己独立的堆栈和代码段。进程之间通过显式地调用通信函数来完成。分类:单程序多数据(Single Prog
3、ram Multiple Data,简称SPMD)prog_aLoadProcessStoreprocess 0process 1process 2LoadProcessGatherStoreMPI程序特点(续)多程序多数据MPMD(a) MPMDMaster/Worker(b) MPMDCoupled AnalysisNode 1Node 2Node 3Node 1Node 2Node 3prog_aprog_bprog_aprog_bprog_c(c) MPMDStreamlineprog_aprog_bprog_cNode 1Node 2Node 3MPI程序的四个基本函数MPI_Ini
4、t和MPI_FinalizeMPI_Init初始化MPI执行环境,建立多个MPI进程之间的联系,为后续通信做准备。而MPI_Finalize则是结束MPI执行环境。MPI_Comm_rank来标识各个MPI进程MPI_Comm_size用来标识相应进程组中有多少个进程MPI编程基础简单的MPI程序示例#include #include mpi.hint main( int argc, char *argv ) int rank;int size; MPI_Init( argc, argv ); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_siz
5、e(MPI_COMM_WORLD, &size); printf( Hello world from process %d of %dn, rank, size ); MPI_Finalize(); return 0;Hello world from process 0 of 4 Hello world from process 1 of 4 Hello world from process 2 of 4 Hello world from process 3 of 4MPI的点对点通信两个最重要的MPI函数MPI_Send和MPI_Recv。int MPI_SEND(buf, count, d
6、atatype, dest, tag, comm)这个函数的含义是向通信域comm中的dest进程发送数据。消息数据存放在buf中,类型是datatype,个数是count个。这个消息的标志是tag,用以和本进程向同一目的进程发送的其他消息区别开来。int MPI_RECV(buf,count,datatype,source,tag,comm,status)MPI_Recv绝大多数的参数和MPI_Send相对应,有相同的意义,很好理解。唯一的区别就是MPI_Recv里面多了一个参数status。status主要显示接收函数的各种错误状态。消息管理7要素MPI最重要的功能莫过于消息传递。正如我们
7、先前看到一样,MPI_Send和MPI_Recv负责在两个进程间发送和接收消息。总结起来,点对点消息通信的参数主要是由以下7个参数组成:发送或者接收缓冲区buf;数据数量count;数据类型datatype;目标进程或者源进程destination/source;消息标签tag;通信域comm;.消息状态字status,只在接收的函数中出现。消息管理7要素 消息数据类型原因支持异构平台计算将非连续内存区中的数据、具有不同数据类型的内容组成消息基本数据类型与C语言对应关系(参考表7.3)与fortran77对应关系(参考表7.4)导出数据类型将不连续的、甚至不同类型的数据元素组合在一起形成新的数
8、据类型需要用户使用MPI提供的构造函数使用规则有类型数据的通信,发送方和接收方均使用相同的数据类型无类型数据的通信,发送方和接收方均已MPI_BYTE为数据类型打包数据通信,发送方和接收方均使用消息管理7要素 消息标签作用 程序在同一接收者的情况下,用来标识不同类型消息的一个整数。实例 Process P: send (A, 32, Q); send (B, 16, Q) Process Q: recv (X, 32, P); recv (Y, 16, P) Process P: send (A, 32, Q, tag1); send (B, 16, Q, tag2) Process Q: r
9、ecv (X, 32, P, tag1); recv (Y, 16, P, tag2)消息管理7要素 通信域一个通信域包含一个进程组及其上下文,限定了消息传递的范围进程组是有限有序集,编号 0,1,2,。,n-1组大小和进程号分别通过MPI_comm_size和MPI_comm_rank获得两个预定义的组MPI_COMM_SELF 和 MPI_COMM_WORLD管理函数:通信域比较 int MPI_comm_compare(comm1, comm2, result)通信域复制 int MPI_comm_dup(comm, newcom)通信域分裂 int MPI_comm_split(com
10、m, color, key, newcomm)通信域销毁 int MPI_comm_free(comm)消息管理的7要素 状态字Status结构定义Typedef struct MPI_Status int count; int cancelled; int MPI_SOURCE; /发送的数据进程号 int MPI_TAG; /发送数据使用的tag int MPI_ERROR; /错误代码MPI_Status消息管理的7要素 状态字实例 while(true) MPI_Recv(received_request, 100, MPI_BYTE, MPI_ANY_SOURCE, MPI_ANY_
11、TAG, comm, &status);Switch(Status. MPI_TAG) case tag_0: perform service type0; case tag_1: perform service type1; case tag_2: perform service type2;统计时间MPI提供了两个时间函数 MPI_Wtime :返回双精度数,标识从过去的某点的时间到当前时间所消耗的时间秒数MPI_Wtick:返回MPI_Wtime函数结果的精度例子:。T1= MPI_Wtime();.T2=MPI_Wtime();T=T2-T1;错误管理MPI在错误管理方面提供了丰富的接
12、口函数,这里我们介绍其中最简单的部分接口。用status.MPI_ERROR来获取错误码。MPI终止MPI程序执行的函数MPI_Abort。 int MPI_Abort(MPI_Comm comm, int errorcode)它使comm通信域的所有进程退出,返回errorcode给调用的环境。通信域comm中的任一进程调用此函数都能够使该通信域内所有的进程结束运行。MPI群集通信同步本函数接口是:int MPI_Barrier(MPI_Comm comm)在操作中,通信子comm中的所有进程相互同步,即它们相互等待,直到所有进程都执行了他们各自的MPI_Barrier函数,然后再各自接着开
13、始执行后续的代码。广播从一个root进程向组内所有其他的进程发送一条消息。接口是:int MPI_Bcast( void *buffer, int count, MPI_Datatype datatype, int root, MPI_Comm comm )MPI群集通信(续)聚集聚集函数MPI_Gather是一个多对一的通信函数。其接口为:int MPI_Gather(void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, M
14、PI_Comm comm)MPI群集通信(续)播撒MPI_Scatter是一对多的传递消息。但是它和广播不同,root进程向各个进程传递的消息是可以不同的。Scatter实际上执行的是与Gather相反的操作。MPI群集通信(续)扩展的聚集和播撒操作MPI_Allgather的作用是每一个进程都收集到其他所有进程的消息,它相当于每一个进程都执行了MPI_Gather执行完了MPI_Gather之后,所有的进程的接收缓冲区的内容都是相同的,也就是说每个进程给所有进程都发送了一个相同的消息。int MPI_Allgather(void *sendbuf, int sendcount, MPI_Da
15、tatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm)MPI群集通信(续)全局交换MPI_Alltoall的每个进程可以向每个接收者发送数目不同的数据,第i个进程发送的第j块数据将被第j个进程接收并存放在其接收消息缓冲区recvbuf的第i块,每个进程的sendcount和sendtype的类型必须和所有其他进程的recvcount和recvtype相同,这也意谓着在每个进程和根进程之间发送的数据量必须和接收的数据量相等。int MPI_Alltoall(void *sendbuf
16、, int sendcount, MPI_Datatype sendtype, void *recvbuf, int recvcount, MPI_Datatype recvtype, MPI_Comm comm)MPI群集通信(续)规约 int MPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm)规约操作包括:MPI_MAXMPI_MINMPI_SUMMPI_PRODMPI群集通信(续)扫描 int MPI_Scan(void * sendbuf, void * recvbuf, int count, MPI_Datatype data
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 健身器材制作工岗位实操知识技能考核试卷含答案
- 收银员岗中团队合作考核试卷含答案
- 《肾癌的诊断与治疗》课件
- 医学课件-标准化病人问诊模板
- 腊梅主要病虫害的防治方法
- 医学课件-护理学专业介绍
- 127系统精讲-损伤中毒-第十五节 常见四肢骨折病人的护理-20250826-212411
- 医疗行业采购管理及谈判技巧培训
- 初中美术教资面试全真模拟题库及答案
- 2026初中道法教资面试答辩题库及答案
- 新药研究与开发技术 课件 第1-3章 概论、新药的发现研究、新药的工艺与质量研究
- 电话卡出售协议合同
- 2024-2025学年高一下学期《重温红色故事 铭记长征精神》主题班会课件
- 医学资料 Suzuki-Miyaura偶联反应学习课件
- 《石油工程技术职业素养》课件-钻井八大系统
- 《河南省企业安全风险辨识管控与隐患排查治理双重预防体系建设导则(试用)》
- 旅游管理的职业生涯规划
- 游乐场项目策划方案
- 学校办公室主任年度考核个人述职报告(四篇合集)
- 2024年中国北方工业有限公司招聘笔试参考题库含答案解析
- 基于cfd的溢洪道挑流鼻坎挑流三维数值模拟
评论
0/150
提交评论