1.点对点通信(point-to-point) 
定义:给定属于同一通信器内的两个进程,其中一个发送消息,一个接收消息; 
MPI 系统定义的所有通信方式均建立在点对点通信之上; 
四种模式:标准模式、缓存区模式、同步模式、就绪模式;

2.标准模式点对点通信 
进程可以随意地发送(接收)消息,与是否存在匹配的消息接收(发送)进程无关;

两类:

阻塞式:消息发送函数返回,用户可以对消息缓存区进行处理,不会影响已发送的消息数据;接受函数返回,用户可以使用接受到的消息数据;

非阻塞式:发送和接受函数返回后,必须调用另一类函数来确保它们的正确完成;

阻塞式                非阻塞式    
          INTEGER   A             INTEGER   A
          A=100                   A=100
          MPI_Send(A,1,… .)      MPI_Isend(A,1,… )
          A=200                   A=200
消息数据: A=100                   A=100 或 A=200
                                  MPI_Isend(A,1,… flag,… )
                                  MPI_Wait(flag,… )
                                  A=200
消息数据: A=100                   A=100

3.点对点通信函数举例 
阻塞式标准消息发送函数
MPI_Send(buf,count,datatype,dest,tag,comm,ierr)  
  Real*8(integer,…)buf  : 消息发送缓存区起始地址(Fortran,  用户的待发送的第一个数据)
  integer  count            :buf 起始的数据单元个数
  integer  datatype         :数据类型(基本或用户定义的) 
  integer  dest             : 接收进程序号
  integer  tag              : 消息的标号
  integer  comm             : 通信器
  integer  ierr             : 函数调用返回错误码

real *8  a(100,100)
integer  b(60,60)
c-----发送50 个双精度数“a(5,20) : a(54,20)” 到2 号进程
call MPI_Send( a (5,20),50,MPI_DOUBLE_PRECISION,2, 99999,MPI_COMM_WORLD,ierr )
c-----发送20 个整型数“b(20,40) : b(39,40)” 到5 号进程
call MPI_Send( b (20,40),20,MPI_DOUBLE_PRECISION,5, 99999,MPI_COMM_WORLD,ierr )

阻塞式标准消息接收函数
MPI_Recv(buf,count,datatype,dest,tag,comm,status, ierr) 
  Real*8(integer,…)buf          : 消息接收缓存区起始地址(Fortran,  用户用于接受的第一个数据)
  integer  count                    :buf 起始的数据单元个数
  integer  datatype                 :数据类型(基本或用户定义的) 
  integer  dest                     : 发送进程序号
  integer  tag                      : 消息的标号
  integer  comm                     : 通信器
  integer   status(MPI_STATUS_SIZE) : 接收状态数组;
  integer  ierr                     : 函数调用返回错误码

real *8  a(100,100)
integer  b(60,60)
c-----从2 号进程接收50 个双精度数到“a(5,20) : a(54,20)” 
call MPI_Recv( a (5,20),50,MPI_DOUBLE_PRECISION,2, 99999,MPI_COMM_WORLD,status,ierr )
c-----从5 号进程接收20 个整型数到“b(20,40) : b(39,40)” 
call MPI_Recv( b (20,40),20,MPI_DOUBLE_PRECISION,5, 99999,MPI_COMM_WORLD,status,ierr )

4.聚合通信(Collective Communication)
定义:属于同一通信器的所有 MPI 进程均必须参与的通信操作;
参与方式:调用同一聚合通信函数;

函数类型:
同步通信函数:所有进程在某个程序点上同步;  
               MPI_Barrier ( comm , ierr )

全局通信函数:  
广播: MPI_Bcast(buf,count,dtype,root,comm,ierr)
root   发送 
other  接受

收集:MPI_Gather(bufs,bufr,count,dtype,root,comm,ierr)
all 发送大小一致的数据块   
root 接受并按序号连续存放
全收集:MPI_Allgather()
all 发送   
all接受   
索引收集:MPI_Gatherv()  
all 发送大小不等的数据块   
root 接受并按索引间断存放

索引全收集:MPI_Allgatherv()
all 发送大小不等的数据块   
All接受并按索引间断存放  
分散:MPI_Scatter(bufs,bufr,count,dtype,root,comm,ierr)
root 发送连续的大小一致数据块
All  接受 
索引分散: MPI_Scatterv()
root 发送间断的大小不一致数据块
All  接受

全交换:  MPI_Alltoall()  
All 发送大小一致数据块到各进程
All接受大小一致数据块并按序号连续存放 
索引全交换: MPI_Alltoallv()
全局规约(global reduction)函数:
规约:   MPI_Reduce(sbuf,rbuf,count,dtype,op,root, comm,ierr);
规约操作类型 op :   MPI_SUM, MPI_MIN, MPI_MAX,  MPI_PROD等12种;   
全规约: MPI_Allreduce(),  除要求将结果返回到所有进程外,与 MPI_Reduce()一致;
规约分散: MPI_Reduce_scatter(),将规约结果分散到各进程;
并行前缀计算:MPI_Scan()  

例子:   求两个向量的内积,并将结果返回进程0 
           subroutine par_blas1(m,a,b,c,comm) 
           real  a(m),b(m)       ! local slice of array
           real  c

初步的 MPI消息传递函数相关推荐

  1. POSIX标准总体分析 执行调度 消息传递 调度参数 进程调度函数 关闭消息队列 得到消息队列参数 设置调度参数 时钟和定时器  时钟和定时器函数 消息传递函数 打开消息队列 设置消息队列参数

    粉丝不过w 调度参数 一个调度参数结构 sched_param 包括了调度策略所支持的执行者所需要的调度参数,它在头文件<sched.h>中定义 执行者可根据规对该结构进行扩展 调度策略 ...

  2. 一个简单的pingpong程序测试mpi消息通讯的开销及并行计算通讯启动时间测算

    一个简单的pingpong程序测试mpi消息通讯的开销及并行计算通讯启动时间测算 一个简单的pingpong程序测试mpi消息通讯的开销 随着科技的进步,集群单节点计算能力的提高,似乎通讯开销成了并行 ...

  3. c语言 mpi程序设计,MPI并行程序设计-基础

    有两门课的作业要用到MPI,"高性能计算环境"和"并行与分布式系统",所以简单了解了一下MPI的基础知识.MPI并不是并行程序设计的唯一方法,但却是一种行之有效 ...

  4. ros 消息队列与缓冲区_Spring Boot消息队列系统:RocketMQ初入门

    前言 来啦老铁! 笔者学习Spring Boot有一段时间了,截至目前已实践.总结了26篇Spring Boot系列学习文章,感兴趣的同学可以关注专题一起学习吧! Spring Boot全家桶 在上一 ...

  5. 【MFC系列-第9天】MFC消息映射机制的原理

    关注公号[逆向通信猿]更精彩!!! 第9天 MFC消息映射机制的原理 9.1 对话框常用的回调函数 a)窗口创建时的消息和虚函数包括:WM_CREATE,WM_INITDIALOG,和PreSubcl ...

  6. mfc formview中的关闭视图函数_VC|API消息处理(回调函数+分支语句)与MFC中的消息映射函数...

    Windows程序不同于控制台程序,因为输入输出不再是scanf和printf那么简单了,而是通过窗口(包括对话框和控件)作为输入.输出的界面以及键盘.鼠标的各类输入事件. 用户在操作系统中的任何操作 ...

  7. 该微信用户未开启“公众号安全助手”的消息接收功能,请先开启后再绑定,Java微信公众号开发消息推送公众号用户绑定问题 的解决办法

    问题概述 在进行微信公众号开发的时候遇到的这个问题,通过Web开发公众号的模板消息推送,在调试的过程中,需要进行开发者接口联调&调试,在调试之前需要将当前的公众号与用户的微信号进行绑定, 绑定 ...

  8. mpi学习1:以C语言和fortran语言为例简单的接收发送

    mpi分为阻塞通信和非租塞通信两种.其中阻塞通信产生了等待时间的情况.(这个等待时间也是空闲时间)也可以说这个发送进程和接收进程需要相互等待对方. 以下为c语言和fortran语言的简单例子,并行为两 ...

  9. 几何深度学习(Geometric Deep Learning)技术

    几何深度学习(Geometric Deep Learning)技术 几何深度学习综述 从论文Geometric Deep Learning: Grids, Groups, Graphs, Geodes ...

最新文章

  1. localdate转date时区问题_时间戳和LocalDateTime和Date互转和格式化
  2. OpenCV 图像旋转
  3. TablePlus 3中文版
  4. 什么是BS结构、CS结构、RIA结构程序
  5. python中sign函数图片_python接口自动化-实现sign签名(MD5加密)
  6. Java并发编程高级篇(十):分离任务的执行和结果的处理
  7. 创建接口匿名实现类的对象的四种方法
  8. 路由相关的初始化(二)
  9. PHP中多维数组var_dump展示不全
  10. 【OpenCV入门指南】第六篇 轮廓检测 下
  11. PMP考试试题是什么样?
  12. 自动量程万用表的实现原理_万用表的工作原理是怎样的?看完终于懂了
  13. golang实现微信模板消息推送
  14. mysql 5.7 搭建传统的异步复制 master、salve
  15. TrackRay:打造一款自己的渗透测试框架
  16. Oracle数据库,停止正在执行的package
  17. 如何屏蔽chrome浏览器内自带广告
  18. 2022江苏最新中级消防设施操作员模拟考试试题及答案
  19. 基于java的网上零食销售系统的设计与实现
  20. Unity 3D 快捷键

热门文章

  1. SpringCloud Consul Config 配置中心(一)
  2. java magnolia,java – Magnolia富文本字段
  3. python 自动收集经济数据_完结】数据分析思维案例实战92 用Python自动办公,做职场高手【更新中】91.一课经济...
  4. Mac 重置homebrew源
  5. java se开发_JAVA_SE基础——3.Java程序的开发流程
  6. android自动播放mp3,audio标签移动端(微信)实现自动播放
  7. python学习day07-encode和decode
  8. 使用VisualStudio或VisualStudio Code作为代码比较工具
  9. D: Starry的神奇魔法(矩阵快速幂)
  10. xhtml html