初步的 MPI消息传递函数
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消息传递函数相关推荐
- POSIX标准总体分析 执行调度 消息传递 调度参数 进程调度函数 关闭消息队列 得到消息队列参数 设置调度参数 时钟和定时器 时钟和定时器函数 消息传递函数 打开消息队列 设置消息队列参数
粉丝不过w 调度参数 一个调度参数结构 sched_param 包括了调度策略所支持的执行者所需要的调度参数,它在头文件<sched.h>中定义 执行者可根据规对该结构进行扩展 调度策略 ...
- 一个简单的pingpong程序测试mpi消息通讯的开销及并行计算通讯启动时间测算
一个简单的pingpong程序测试mpi消息通讯的开销及并行计算通讯启动时间测算 一个简单的pingpong程序测试mpi消息通讯的开销 随着科技的进步,集群单节点计算能力的提高,似乎通讯开销成了并行 ...
- c语言 mpi程序设计,MPI并行程序设计-基础
有两门课的作业要用到MPI,"高性能计算环境"和"并行与分布式系统",所以简单了解了一下MPI的基础知识.MPI并不是并行程序设计的唯一方法,但却是一种行之有效 ...
- ros 消息队列与缓冲区_Spring Boot消息队列系统:RocketMQ初入门
前言 来啦老铁! 笔者学习Spring Boot有一段时间了,截至目前已实践.总结了26篇Spring Boot系列学习文章,感兴趣的同学可以关注专题一起学习吧! Spring Boot全家桶 在上一 ...
- 【MFC系列-第9天】MFC消息映射机制的原理
关注公号[逆向通信猿]更精彩!!! 第9天 MFC消息映射机制的原理 9.1 对话框常用的回调函数 a)窗口创建时的消息和虚函数包括:WM_CREATE,WM_INITDIALOG,和PreSubcl ...
- mfc formview中的关闭视图函数_VC|API消息处理(回调函数+分支语句)与MFC中的消息映射函数...
Windows程序不同于控制台程序,因为输入输出不再是scanf和printf那么简单了,而是通过窗口(包括对话框和控件)作为输入.输出的界面以及键盘.鼠标的各类输入事件. 用户在操作系统中的任何操作 ...
- 该微信用户未开启“公众号安全助手”的消息接收功能,请先开启后再绑定,Java微信公众号开发消息推送公众号用户绑定问题 的解决办法
问题概述 在进行微信公众号开发的时候遇到的这个问题,通过Web开发公众号的模板消息推送,在调试的过程中,需要进行开发者接口联调&调试,在调试之前需要将当前的公众号与用户的微信号进行绑定, 绑定 ...
- mpi学习1:以C语言和fortran语言为例简单的接收发送
mpi分为阻塞通信和非租塞通信两种.其中阻塞通信产生了等待时间的情况.(这个等待时间也是空闲时间)也可以说这个发送进程和接收进程需要相互等待对方. 以下为c语言和fortran语言的简单例子,并行为两 ...
- 几何深度学习(Geometric Deep Learning)技术
几何深度学习(Geometric Deep Learning)技术 几何深度学习综述 从论文Geometric Deep Learning: Grids, Groups, Graphs, Geodes ...
最新文章
- localdate转date时区问题_时间戳和LocalDateTime和Date互转和格式化
- OpenCV 图像旋转
- TablePlus 3中文版
- 什么是BS结构、CS结构、RIA结构程序
- python中sign函数图片_python接口自动化-实现sign签名(MD5加密)
- Java并发编程高级篇(十):分离任务的执行和结果的处理
- 创建接口匿名实现类的对象的四种方法
- 路由相关的初始化(二)
- PHP中多维数组var_dump展示不全
- 【OpenCV入门指南】第六篇 轮廓检测 下
- PMP考试试题是什么样?
- 自动量程万用表的实现原理_万用表的工作原理是怎样的?看完终于懂了
- golang实现微信模板消息推送
- mysql 5.7 搭建传统的异步复制 master、salve
- TrackRay:打造一款自己的渗透测试框架
- Oracle数据库,停止正在执行的package
- 如何屏蔽chrome浏览器内自带广告
- 2022江苏最新中级消防设施操作员模拟考试试题及答案
- 基于java的网上零食销售系统的设计与实现
- Unity 3D 快捷键
热门文章
- SpringCloud Consul Config 配置中心(一)
- java magnolia,java – Magnolia富文本字段
- python 自动收集经济数据_完结】数据分析思维案例实战92 用Python自动办公,做职场高手【更新中】91.一课经济...
- Mac 重置homebrew源
- java se开发_JAVA_SE基础——3.Java程序的开发流程
- android自动播放mp3,audio标签移动端(微信)实现自动播放
- python学习day07-encode和decode
- 使用VisualStudio或VisualStudio Code作为代码比较工具
- D: Starry的神奇魔法(矩阵快速幂)
- xhtml html