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) 全局操作:将各处理器的局部结果组合起来形成整个问题的解,这样的操作包括:全局同步、播送、规约、前缀运算、收集/散播等。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值