MPI数据通信常用函数
Posted Dream_yz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MPI数据通信常用函数相关的知识,希望对你有一定的参考价值。
MPI数据通信常用函数:
- int MPI_Init(int *argc, char **argv[]);
功能:用于并行环境初始化,其后面的代码到MPI_Finalize()函数之前的代码在每个进程中都会被执行一次。
除MPI_Initialized()外,其余MPI函数都应在其后被调用。
MPI系统将通过argc,argv得到命令行参数,即main函数必须带参数,否则会出错。 - int MPI_Finalize(void);
功能:退出MPI系统,所有进程正常退出都必须调用。它用于并行代码的结束,即结束除主进程外其它进程。
注意:串行代码仍可在主进程(rank=0)上运行,但不能再有MPI函数。 - int MPI_Comm_size(MPI_Comm comm, int *size);
功能:获取进程个数size。
参数:指定一个通信子,也指定了一组共享改空间的进程,这些进程组成该通信子的group(组)。获得通信子comm中规定的group包含的进程的数量。 - int MPI_Comm_rank(MPI_Comm comm, int *rank);
功能:得到本进程在通信空间中的rank值,即在组中的逻辑编号(该rank值为0到p-1间的整数,相当于进程的ID) - int MPI_Send(void *buff, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm);
功能:发送通信内容。
参数说明:
buff:要发送的数据
count:发送消息的数据长度
datatype:发送的数据类型
dest:发送的目的进程号
tag:消息标签,接收方需要有相同的消息标签才能接收该消息
comm:通讯域,表明要向哪个组发送消息。 - int MPI_Recv(void *buff, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status);
功能:接收通信内容。
参数说明:
buff:接收消息要保存的变量
count:接收消息的数据长度
datatype:接收消息的数据类型
dest:接收端进程号
tag:消息标签,需要与发送方的tag值相同的消息标签才能接收该消息
comm:通讯域
status:消息状态。接收函数返回时,将在这个参数指示的变量中存放实际接收消息的状态信息,包括消息的源进程标识,消息标签,包含的数据项个数。 - MPI_Bcast
功能:从单个进程向同一个通信子中的所有其他进程发送消息。 - MPI_Scatter
功能:在各个进程间分配一个数组的元素。如果数组有n个元素,进程数量为p,则第一组的n/p个元素发送到进程0,第二组n/p个元素发送到进程1,以此类推。 - MPI_Gather
功能:是MPI_Scatter的逆操作。如果每个进程都存储了包含m个元素的子数组,那么MPI_Gather将收集这些元素到一个特定的进程中,先从进程0收集元素,然后是进程1,以此类推。 - MPI_Allgather
功能:类似MPI_Gather,它收集所有的元素并分发给所有进程。 - MPI_Barrier
功能:用于同步进程,在同一个通信子中的所有进程调用该函数前,所有调用MPI_Barrier的进程都不能返回。
MPI中四个重要概念:
1) 消息数据类型
2) 通信子
3) 通信操作
4) 虚拟拓扑
SPMD形式的消息传递程序主要步骤:
1) 数据划分:尽量考虑负载平衡,存储空间的均衡使用以减少处理器之间的通信
2) 优化通信:尽量提高计算/通信比,数据就地使用,合并短消息成一个长消息进行传输
3) 全局操作:将各处理器的局部结果组合起来形成整个问题的解,这样的操作包括:全局同步、播送、规约、前缀运算、收集/散播等。
以上是关于MPI数据通信常用函数的主要内容,如果未能解决你的问题,请参考以下文章
名为 connect() 的函数如何阻止 MPI C 程序运行?
西门子PLC中,经常用的到PPI、MPI、DP、以太网、RS485、RS232、串口、MODBUS等通讯,具体都用啥区别?