[MPI] MPI 编程指南 -- MPI消息


学习资料 中国科技大学 《MPI编程指南》PPT

学习笔记

一个消息好比一个信封,

消息的内容即信的内容, 在MPI中称为 消息缓冲(Message Buffer), 消息缓冲由三元组 <起始地址,数据个数,数据类型> 标识。

消息接收/发送者即信的地址,在MPI中称为 消息信封(Message Envelop),消息信封由三元组 <源/目标进程,消息标签,通信域> 标识。

MPI_Send( buf, count, datatype, dest, tag, comm )

MPI消息类型

预定义数据类型,MPI通过提供预定义数据类型来解决异构计算中的互操作问题,建立它与具体语言的对应关系。

派生数据类型,引入派生数据类型定义由数据类型不同且地址空间不连续的数据项组成的消息。

MPI消息(通信域)

通信域(Communicator)包括进程组(Process Group)和通信上下文(Communication Contex)等内容,用于描述通信进程间的通信关系。

进程组是进程的有限、有序集。一个进程用它在一个通信域(组)中的编号进行标识。组的大小和进程编号可以通过调用以下MPI函数获得:

MPI_Comm_size(communicator, &group_size)

MPI_Comm_rank(communicator, &my_rank)

通信上下文:安全的区别不同的通信以免相互干扰。

进程组合通信上下文结合形成了通信域。MPI_COMM_WORLD 是所有进程的集合。

MPI管理通信域函数:

MPI_Comm_size, 获取指定通信域中进程的个数;

MPI_Comm_rank, 获取当前进程在指定通信域中的编号;

MPI_Comm_compare, 对给定的两个通信域进行比较;

MPI_Comm_dup, 复制一个已有的通信域生成一个新的通信域,两者除通信上下文不同外,其它都一样。

MPI_Comm_create, 根据给定的进程组创建一个新的通信域;

MPI_Comm_split, 从一个指定的通信域分裂出多个子通信域,每个字通信域中的进程都是原通信域中的进程;

MPI_Comm_free, 释放一个通信域。

MPI 消息(消息状态)

消息状态(MPI_Status类型)存放接收消息的状态信息,是接收函数MPI_Recv最后一个参数,包括:

-> 消息的源进程标识---MPI_SOURCE;

-> 消息标签 --- MPI_TAG;

-> 错误状态 ---- MPI_ERROR;

-> 其它 --- 包括数据项个数等,但多为系统保留。

假设多个客户进程发送消息给服务进程请求服务,通过消息标签来标识客户进程,从而服务进程采取不同的服务。
while (true){
MPI_Recv(received_request,100,MPI_BYTE,MPI_Any_source,MPI_Any_tag,comm,&Status);
switch (Status.MPI_Tag) {
case tag_0: perform service type0;
case tag_1: perform service type1;
case tag_2: perform service type2;
}

}

学习感想

优质内容筛选与推荐>>
1、BZOJ-1898: [Zjoi2005]Swamp 沼泽鳄鱼 (递推+矩阵快速幂)
2、动态加载母版页
3、ToCControl控件突然不能用了
4、关于自增ID的弊端
5、C语言指针


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号