消息传递编程接口MPI.ppt_第1页
消息传递编程接口MPI.ppt_第2页
消息传递编程接口MPI.ppt_第3页
消息传递编程接口MPI.ppt_第4页
消息传递编程接口MPI.ppt_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 第四讲消息传递编程接口MPI 一 MPI编程基础 2 主要内容 MPI安装 程序编译与运行 MPI进程 进程组MPI通信器MPI消息MPI程序基本结构 MPI编程基础 MPI程序编译与运行MPI数据类型MPI几个常用接口 3 MPI介绍 MessagePassingInterface 消息传递编程标准 目前最为通用的并行编程方式提供一个高效 可扩展 统一的并行编程环境 MPI是一个库 不是一门语言 MPI提供库函数 过程供C FORTRAN调用MPI是一种标准或规范的代表 并不是一个具体实现所有的并行计算机制造商都提供对MPI的支持MPI是一种消息传递编程模型 最终目的是服务于进程间通信这一目标 4 MPI介绍 MPI1 0 MPICH1 2 7p1MPI2 0 MPICH21 1 1p1 MPI的目标 较高的通信性能 较好的程序可移植性 强大的功能 5 MPI下载与安装 MPICH下载 http www unix mcs anl gov mpi 6 进程与通信器 MPI进程 MPI程序中一个独立参与通信的个体 MPI进程组 MPI程序中由部分或全部进程构成的有序集合每个进程都被赋予一个所在进程组中唯一的序号 rank 用于在该组中标识该进程 称为进程号 取值从0开始 进程的具体个数由用户在递交并行任务时指定 MPI通信器 通信子 Communicator MPI程序中进程间的通信必须通过通信器进行通信器分为域内通信器 同一进程组内的通信 和域间通信器 不同进程组的进程间的通信 7 进程与通信器 MPI程序中 一个MPI进程由一个进程组和在该组中的进程号唯一确定 或由一个通信器和在该通信器中的进程号唯一确定 进程号是相对进程组或通信器而言的 同一进程在不同的进程组或通信器中可以有不同的进程号 MPI程序启动时自动建立两个通信器 MPI COMM WORLD 包含程序中所有MPI进程MPI COMM SELF 单个进程独自构成 仅包含自己 进程号是在进程组或通信器被创建时赋予的空进程 MPI PROC NULL与空进程通信时不做任何操作 8 MPI消息 9 第一个MPIC程序 include mpi h includeintmain intargc char argv intmyid np namelen charproc name MPI MAX PROCESSOR NAME MPI Init 10 MPI程序执行过程 启动4个进程运行可执行文件hello 进程0 MPI Init MPI Comm rankmyid 0 MPI Get processor nameproc name c0101namelen 5 Writehello Iamproc 0of4onc0101 MPI Finalize 进程3 MPI Init MPI Comm rankmyid 3 MPI Get processor nameproc name c0102namelen 5 Writehello Iamproc 3of4onc0102 MPI Finalize 程序运行结束 进程1 进程2 11 MPI程序分析 在单个结点 c0101 上 开4个进程的运行结果 Hello IamProc 1of4onc0101Hello IamProc 0of4onc0101Hello IamProc 2of4onc0101Hello IamProc 3of4onc0101 12 MPI程序执行过程 13 MPI编程惯例 MPI的所有常量 变量与函数均以MPI 开头MPI的C语言接口为函数在C程序中 所有常数的定义除下划线外一律由大写字母组成 在函数和数据类型定义中 接MPI 之后的第一个字母大写 其余全部为小写字母 即MPI Xxxx xxx形式MPI程序的开始和结束必须是MPI Init和MPI Finalize 分别完成MPI的初始化和结束工作除MPI Wtime和MPI Wtick外 所有C函数调用之后都将返回一个错误信息码由于C语言的函数调用机制是值传递 所以MPI的所有C函数中的输出参数用的都是指针 14 MPI编程惯例 MPI是按进程组 ProcessGroup 方式工作 所有MPI程序在开始时均被认为是在通信器MPI COMM WORLD所拥有的进程组中工作 之后用户可以根据自己的需要 建立其它的进程组所有MPI的通信一定要在通信器中进行 15 编译与运行 C编写的MPI程序 mpicc ohellohello c MPI程序的编译 MPICH2中的mpirun和mpiexec是同一个命令 16 MPI编程初步数据类型与基本接口 17 MPI数据类型 MPI数据类型分 原始数据类型和自定义数据类型 MPI定义了一些基本数据类型主要用于消息传递 MPI数据类型命名规则 以MPI 开头 后面跟C语言原始数据类型名 全部为大写 18 MPI原始数据类型 自定义数据类型以后再介绍 19 MPI常量 MPI定义一组常量 MPI常量命名规则 全部大写 MPI MAX PROCESSOR NAMEMPI PROC NULLMPI COMM WORLDMPI COMM SELFMPI COMM NULLMPI ANY SOURCEMPI ANY TAGMPI TAG UBMPI LBMPI UBMPI BOTTOM 20 MPI常用接口 MPI INITMPI FINALIZEMPI COMM RANKMPI COMM SIZEMPI SENDMPI RECV MPI SENDRECVMPI SENDRECV REPLACEMPI GET COUNTMPI ABORTMPI WTIMEMPI GET PROCESSOR NAMEMPI MPI GET VERSION 21 MPI INIT MPI INIT MPI初始化 该函数初始化MPI并行程序的执行环境它必须在调用所有其它MPI函数之前被调用 除MPI INITIALIZED 在一个MPI程序中 只能被调用一次 22 MPI FINALIZE MPI FINALIZE 结束MPI系统 该函数清除MPI环境的所有状态它被调用后 所有MPI函数都不能再调用 包括MPI INIT 23 MPI COMM RANK MPI COMM RANK comm rank 该函数返回本进程在指定通信器中的进程号 24 MPI COMM SIZE MPI COMM SIZE comm size 该函数返回指定通信器所包含的所有进程个数 25 MPI SEND MPI SEND buf count datatype dest tag comm 阻塞型消息发送接口最基本的点对点通信函数之一 26 MPI SEND MPI SEND将缓冲区中count个datatype类型的数据发给进程号为dest的目的进程这里count是元素个数 即指定数据类型的个数 不是字节数 数据的起始地址为bufdatatype是MPI数据类型本次发送的消息标签是tag 使用标签的目的是把本次发送的消息和本进程向同一目的进程发送的其它消息区别开来dest的取值范围为0 np 1 np表示通信器comm中的进程数 或MPI PROC NULL tag的取值为0 MPI TAG UB该函数可以发送各种类型的数据 如整型 实型 字符等 MPI SEND buf count datatype dest tag comm 点对点通信是MPI通信机制的基础 27 MPI RECV MPI RECV buf count datatype source tag comm status 阻塞型消息接收接口最基本的点对点通信函数之一 28 MPI RECV 从指定的进程source接收不超过count个datatype类型的数据 并把它放到缓冲区中 起始位置为buf 本次消息的标识为tagsource取值范围为0 np 1 或MPI ANY SOURCE 或MPI PROC NULL tag取值为0 MPI TAG UB或MPI ANY TAG接收消息时返回的状态STATUS 在C语言中是用结构定义的 可供查询的成员包括MPI SOURCE MPI TAG和MPI ERROR 此外 STATUS还包含接收消息元素的个数 但它不是显式给出的 需要调用函数MPI GET COUNT查询 MPI RECV buf count datatype source tag comm status 29 程序示例 例 将每个进程中某个数据发送给下一个进程 并从前一个进程接收一个数据 即0号进程给1号进程发送一个数据 并从np 1号进程接收一个数据 1号进程从0号进程接收一个数据 并向2号进程发送一个数据 以此类推 实现方式一 0号进程先发送后接收 其它进程先接收后发送 实现方式二 奇数号进程先发送后接收 偶数号进程先接收后发送 例 ex4sendrecv01 c ex4sendrecv02 c 上机作业 在使用阻塞型函数传递消息时要避免死锁 30 MPI发送接收 MPI SEND buf count datatype dest tag comm MPI RECV buf count datatype source tag comm status 所发送的数据的实际数据类型 发送函数中的数据类型 接收函数中的数据类型要一致 31 MPI常用接口 MPI GET PROCESSOR NAMEMPI SENDRECVMPI SENDRECV REPLACEMPI GET COUNTMPI ABORTMPI WTIMEMPI MPI GET VERSION 32 获取结点主机名 MPI GET PROCESSOR NAME name namelen 该函数返回进程所在结点的主机名 33 MPI SENDRECV sendbuf sendcount sendtype dest sendtag recvbuf recvcount recvtype source recvtag comm status MPI SENDRECV 发送消息和接收消息组合在一起 34 MPI SENDRECV 好处是不用考虑先发送还是先接收消息 从而可以避免消息传递过程中可能的死锁sendbuf和recvbuf必须指向不同的缓冲区 例 ex4sendrecv03 c MPI SENDRECV sendbuf sendcount sendtype dest sendtag recvbuf recvcount recvtype source recvtag comm status 35 MPI SENDRECV REPLACE MPI SENDRECV REPLACE buf count datatype dest sendtag source recvtag comm status 功能与MPI SENDRECV类似 但收发消息使用的是同一个缓冲区 例 ex4sendrecv04 c 36 程序示例 例 计算 的值 采用等步长中矩形公式 其中n为积分区间数 h 1 n为步长 xi i 0 5 h为积分区间的中点采用p个进程同时计算 各自计算其中的一部分 然后再将结果加起来 例 ex4pi01 c 37 MPI GET COUNT MPI GET COUNT status datatype count 查询实际接收到的数据的信息 38 MPI ABORT MPI ABORT comm errorcode

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论