MPI数据通信常用函数

Posted Dream_yz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MPI数据通信常用函数相关的知识,希望对你有一定的参考价值。

MPI数据通信常用函数:

  1. int MPI_Init(int *argc, char **argv[]);
    功能:用于并行环境初始化,其后面的代码到MPI_Finalize()函数之前的代码在每个进程中都会被执行一次。
    除MPI_Initialized()外,其余MPI函数都应在其后被调用。
    MPI系统将通过argc,argv得到命令行参数,即main函数必须带参数,否则会出错。
  2. int MPI_Finalize(void);
    功能:退出MPI系统,所有进程正常退出都必须调用。它用于并行代码的结束,即结束除主进程外其它进程。
    注意:串行代码仍可在主进程(rank=0)上运行,但不能再有MPI函数。
  3. int MPI_Comm_size(MPI_Comm comm, int *size);
    功能:获取进程个数size。
    参数:指定一个通信子,也指定了一组共享改空间的进程,这些进程组成该通信子的group(组)。获得通信子comm中规定的group包含的进程的数量。
  4. int MPI_Comm_rank(MPI_Comm comm, int *rank);
    功能:得到本进程在通信空间中的rank值,即在组中的逻辑编号(该rank值为0到p-1间的整数,相当于进程的ID)
  5. int MPI_Send(void *buff, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm);
    功能:发送通信内容。
    参数说明:
    buff:要发送的数据
    count:发送消息的数据长度
    datatype:发送的数据类型
    dest:发送的目的进程号
    tag:消息标签,接收方需要有相同的消息标签才能接收该消息
    comm:通讯域,表明要向哪个组发送消息。
  6. 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:消息状态。接收函数返回时,将在这个参数指示的变量中存放实际接收消息的状态信息,包括消息的源进程标识,消息标签,包含的数据项个数。
  7. MPI_Bcast
    功能:从单个进程向同一个通信子中的所有其他进程发送消息。
  8. MPI_Scatter
    功能:在各个进程间分配一个数组的元素。如果数组有n个元素,进程数量为p,则第一组的n/p个元素发送到进程0,第二组n/p个元素发送到进程1,以此类推。
  9. MPI_Gather
    功能:是MPI_Scatter的逆操作。如果每个进程都存储了包含m个元素的子数组,那么MPI_Gather将收集这些元素到一个特定的进程中,先从进程0收集元素,然后是进程1,以此类推。
  10. MPI_Allgather
    功能:类似MPI_Gather,它收集所有的元素并分发给所有进程。
  11. MPI_Barrier
    功能:用于同步进程,在同一个通信子中的所有进程调用该函数前,所有调用MPI_Barrier的进程都不能返回。

MPI中四个重要概念:
1) 消息数据类型
2) 通信子
3) 通信操作
4) 虚拟拓扑

SPMD形式的消息传递程序主要步骤:
1) 数据划分:尽量考虑负载平衡,存储空间的均衡使用以减少处理器之间的通信
2) 优化通信:尽量提高计算/通信比,数据就地使用,合并短消息成一个长消息进行传输
3) 全局操作:将各处理器的局部结果组合起来形成整个问题的解,这样的操作包括:全局同步、播送、规约、前缀运算、收集/散播等。

以上是关于MPI数据通信常用函数的主要内容,如果未能解决你的问题,请参考以下文章

MPI自定义数据类型

名为 connect() 的函数如何阻止 MPI C 程序运行?

西门子PLC中,经常用的到PPI、MPI、DP、以太网、RS485、RS232、串口、MODBUS等通讯,具体都用啥区别?

跨库的 MPI 消息

使用MPI_Sendrecv实现MPI_Allgather

MPI学习3MPI并行程序设计模式:不同通信模式MPI并行程序的设计