MPI编程的常用接口速查
获取当前时间
在插入MPI提供的头文件后,可以获得获取时间的函数。
double MPI_Wtime(void) 取得当前时间, 计时的精度由 double MPI_Wtick(void) 取得
作为对比,一般在C/C++中, 插入time.h,通过 clock_t clock(void) 取得当前时间, 计时的精度由常数 CLOCKS_PER_SEC 定义。
点到点通信函数
进程间的通信需要通过一个通信器来完成。MPI 环境在初始化时会自动创建两个通信器,一个称为 MPI_COMM_WORLD,它包含程序中的所有进程,另一个称为 MPI_COMM_SELF,它是每个进程独自构成的、仅包含自己的通信器。MPI 系统提供了一个特殊进程号 MPI_PROC_NULL,它代表空进程 (不存在的进程),与 MPI_PROC_NULL 进行通信相当于一个空操 作,对程序的运行没有任何影响。
使用MPI_Barrier(communicator)来完成同步
使用MPI_Send(message, size, data_type, dest_id, tag, communicator) 来把数据message封装起来成为真正的消息结构,向进程号为dest_id的进程发送数据,是否要先把消息存入缓冲区根据默认缓冲区的大小确定。
使用MPI_Bsend(message_data, size, data_type, dest_id, tag, communicator) 来发送数据,需要预先注册一个缓冲区,并调用MPI_Buffer_attach(buffer, buf_size)来供MPI环境使用
使用MPI_Buffer_attach(buffer, size)来把缓冲区buffer提交给MPI环境,其中buffer是通过malloc分配的内存块。
使用MPI_Buffer_detach(&buffer,&size)来确保传输的完成,尽量把detach和attach函数配对使用,正如尽可能同时使用malloc和free,同时使用Init和Finalize,防止遗漏!
使用MPI_Pack_size(size, data_type, communicator, &pack_size)来获取包装特定类型的数据所需要的缓冲区大小(还没有计入头部,所以真正缓冲区大小 buf_size = MPI_BSEND_OVERHEAD + pack_size,如果有多份数据发送,则buf_size还要叠加)。
使用MPI_Recv(message, size, data_type, src_id, tag, communicator, status)来接收数据,把已经到达接收缓冲区的数据解析到message数组中,只有全部数据都解析出来时,函数才返回。
tips:除了上述两种发送模式外,还有就绪通信MPI_Rsend()和同步通信MPI_Ssend(),参数都是一致的,函数的区别在于,如果已经保证接收动作在发送动作之前启动了(可以利用MPI_Barrier函数做到这一点),那么就可以使用MPI_Rsend()提高效率;如果需要保证接收动作发生后,发送动作才能返回,那么就使用MPI_Ssend()
tips:上面都是阻塞通信的方式,也就是调用这些函数的时候进程可能会阻塞。可以使用别的通信模式,或者使用多线程来改变这一点。
集合通信
MPI_Bcast广播,使得数据有p份拷贝
MPI_Scatter散发,每份数据只拷贝一次
MPI_Gather收集,每份数据只拷贝一次
MPI_Reduce归约
以后如果需要用到再写吧。
数据类型和预定义的量
用于作为参数的数据类型 MPI_INT, MPI_DOUBLE, MPI_CHAR, MPI_Status
预定义的量 MPI_STATURS_IGNORE, MPI_ANY_SOURCE, MPI_ANY_TAG
初始化与结束
使用MPI_Init(&argc, &argv)来初始化MPI环境,可能是一些全局变量的初始化。
使用MPI_Comm_rank(communicator, &myid)来获取当前进程在通信器中具有的进程号。
使用MPI_Comm_size(communicator, &numprocs)来获取通信器中包含的进程数目。
使用MPI_Finalize()来结束并行编程环境。之后我们就可以创建新的MPI编程环境了。
MPI编程的常用接口速查的更多相关文章
- Git 常用命令速查表(图文+表格)
一. Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支git branch -r ...
- Git 常用命令速查表(图文+表格)【转】
转自:http://www.jb51.net/article/55442.htm 一. Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态 git comm ...
- 转收藏:Git常用命令速查表
一. Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支git branch -r ...
- Linux常用命令速查备忘
Linux常用命令速查备忘 PS:备忘而已,详细的命令参数说明自己man 一. 启动,关机,登入,登出相关命令 [login] 登录 [logout] 登出 [exit] 登出 [shutdown ...
- web 开发:CSS3 常用属性——速查手册!
web 开发:CSS3 常用属性——速查手册! CSS3 简介:http://www.runoob.com/css3/css3-intro.html 1.目录 http://caniuse.com/ ...
- Linux常用命令速查-汇总篇
Linux常用命令速查-用户管理 Linux常用命令速查-文件管理 Linux常用命令速查-系统监控 Linux常用命令速查-网络管理 Linux常用命令速查-定时任务 Linux常用命令速查-Vim
- git 常用命令速查
git 常用命令速查 命令速查表 一.克隆项目 把远程仓库上的项目克隆到本地.一般来说项目是有1个或2个分支,主要是做开发和线上的区别.既然所属分支不一样,那命令也会有一点区别.这里假设是有2个分支, ...
- 实用掌中宝--HTML&CSS常用标签速查手册 PDF扫描版
实用掌中宝--HTML&CSS常用标签速查手册 内容推荐: 本书第一篇以语法和实例相结合的形式,详细讲解了HTML语言中各个元素及其属性的作用.语法和显示效果:第二篇从CSS基本概念开始,分别 ...
- Docker常用命令速查手册(华贵铂金版)
原创声明:作者:Arnold.zhao 博客园地址:https://www.cnblogs.com/zh94 Docker常用命令速查手册 搜索仓库镜像 docker search nginx 获取 ...
随机推荐
- C# Socket服务器端如何判断客户端断开
使用Socket类中的Poll方法,就可以. Socket client //假如已经创建好了,连接到服务器端得Socket的客户端对象. 我们只要client.Poll(10,SelectMode. ...
- linux 下 apache启动、停止、重启命令
基本的操作方法: 本文假设你的apahce安装目录为/usr/local/apache2,这些方法适合任何情况 apahce启动命令: 推荐/usr/local/apache2/bin/apachec ...
- addListener添加事件监听器,第三个参数useCapture (Boolean) 的作用
addEventListener 有三个参数:第一个参数表示事件名称(不含 on,如 "click"):第二个参数表示要接收事件处理的函数:第三个参数为 useCapture,本文 ...
- Hadoop格式化HDFS报错java.net.UnknownHostException: localhost.localdomain: localhost.localdomain
异常描述: 在对HDFS格式化,执行hadoop namenode -format命令时,出现未知的主机名的问题,异常信息如下所示: [shirdrn@localhost bin]$ hadoop n ...
- *[codility]CartesianSequence
https://codility.com/programmers/challenges/upsilon2012 求笛卡尔树的高度,可以用单调栈来做. 维持一个单调递减的栈,每次进栈的时候记录下它之后有 ...
- MySQL错误代码大全【转载】
B.1. 服务器错误代码和消息 服务器错误信息来自下述源文件: 错误消息信息列在share/errmsg.txt文件中."%d"和"%s"分别代表编号和字符串, ...
- I²C接口学习总结
1.IIC总线概念: a.只有两条总线线路:一条串行数据线,一条串行时钟线. b.每个连接到总线的器件都可以使用软件根据它们的唯一的地址来识别. c.传输数据的设备间是简单的主从关系. ...
- Ios 弹框 MJPopup,KxMenu
IOS 弹框 如果直接弹出一个自定义的视图 可以选用第三方: MJPopup 弹出: if(!bandview) { bandview=[[[NSBundle mainBundle]loadNibNa ...
- 苹果操作系统Mac OS X
OS X 是先进的操作系统.基于坚如磐石的 UNIX 基础,设计简单直观,让处处创新的 Mac 安全易用,高度兼容,出类拔萃. UNIX 之威力,Mac 之简单OS X 既简单易用且功能强大.所有的一 ...
- Shuffle和排序
MapReduce确保每个reducer的输入都按键排序.系统执行排序的过程——将map输出作为输入传给reducer——称为shuffle.shuffle属于不断被优化和改进的代码库的一部分,从许多 ...