mpi函数

管理函数
Int MPI(int *argc,char **argv)
Int MPI_Finalize(void)  清除MPI的所有状态
Int MPI_Inilialized(int flag)  检查是否调用了MPI_INIT
Int MPI_Error_String(int errorcode,char *string ,int *len) 检查MPI函数错误
进程组操作函数
1.       Int MPI_Comm_group(MPI_Comm comm,MPI_Group *group)
  IN     comm   通信子
  OUT   group    对应comm的进程组
用来建立一个通信子对应的新进程组,之后就可以对此进程组进行需要的操作
 
2.       Int MPI_group_free(MPI_Group *group)
  INOUT    group    释放进程组并返回MPI_Group_NULL
调用MPI_Group_free之后,任何关于此进程组的操作都视为无效
 
3.       Int MPI_Group_size(MPI_Group group,int *size)
IN    Group   进程组
OUT  size     进程组中的进程个数
如果进程组是MPI_Group_Empty,则返回值size为0
4.       Int MPI_Group_rank(MPI_Group group,int *rank)
IN     Group      进程组
OUT   Rank       进程在进程组中的编号
如果进程不是进程组中的成员,则返回值RANK为MPI_UNDEFINED
5.       Int MPI_Group_translate_ranks(MPI_Group  group1,int n,int *ranks1,MPI_Group group2,int *ranks2)
IN      Group1      进程组1
IN      n           ranks1和ranks2中数组元素的个数
IN      ranks1       进程组1中有效编号组成的数组
IN      group2       进程组2
OUT    ranks2       ranks1中的元素在进程组2中的对应编号
如果属于进程组1的某个进程可以在ranks1中找到,而这个进程不属于进程组2,则在ranks2中对应ranks1的位置返回值为MPI_UNDEFINED
6.       Int MPI_Group_incl(MPI_Group group,int n,int *ranks,MPI_Group new group)
IN      Group      进程组
IN      n          ranks数组中元素的个数和新进数组的大小
IN      ranks       将在新进程组中出现的旧进程组中的编号
OUT      newgroup    有ranks定义的顺序导出的新进程组
7.       Int MPI_Group_excl(MPI_Group group,int n,int *ranks,MPI_Group newgroup)
IN      group      进程组
IN      N         ranks数组中元素的个数
IN      ranks      在新进程组中不出现的旧进程组中的编号
OUT    newgroup  旧进程组中不在ranks里的元素组成的新进程组
8.       Int MPI_Group_union(MPI_Group group1,MPI_Group group2,MPI_Group newgroup)
IN      group1      进程组1
IN      group2      进程组2
OUT    newgroup   进程组1和进程组2的并
9.       Int MPI_Group_intersection(MPI_Group group1,MPI_Group group2,MPI_Group newgroup)
 IN      group1      进程组1
IN      group2      进程组2
OUT    newgroup   进程组1和进程组2的交
10.   Int MPI_Group_difference(MPI_Group group1,MPI_Group group2,MPI_Group newgroup)
IN      group1      进程组1
IN      group2      进程组2
OUT    newgroup   进程组1和进程组2的差
 
MPI通信子操作
1.       int MPI_Comm_Size(MPI_Comm comm,int *size)
IN      comm      通信子
OUT    size        通信子中的进程个数
2.       int MPI_Comm_rank(MPI_Comm comm,int *rank)
IN      comm      通信子
OUT    rank        通信子中的进程编号
3.       int MPI_Comm_dup(MPI_Comm comm,MPI_Comm *newcomm)
IN      comm      通信子
OUT    newcomm  comm通信子的复制
4.       int MPI_Comm_Create(MPI_Comm comm,MPI_Group group,MPI_Comm *newcomm)
IN      comm      通信子
IN      group      通信子comm的一个子集
OUT    newcomm  对应group的一个新通信子
5.       int MPI_Comm_Split(MPI_Comm comm,int color,int key,MPI_Comm *newComm)
IN      comm      通信子
IN      color       子集控制值
IN      key        子集进程编号的顺序
OUT    newcomm   由此产生的新通信子
划分comm所对应的进程组为不相交的子进程组,每个子进程组有一个共同的值color
6.       int MPI_Comm_free(MPI_Comm *Comm)
INOUT      comm      通信子
点到点通信函数
一对进程之间的数据转换,也就是说一边发送数据另一边接收数据,点到点通信是MPI通信机制的基础,它分为同步通信和异步通信二种机制。
阻塞式通信函数
1.       int MPI_send(void *buf,int count,MPI_Datatype datatype,int dest,int tag,MPI_Comm comm)
IN      buf      所要发送消息数据的首地址
IN      count    发送消息数组元素的个数
IN      datatype  发送消息的数据类型
IN      dest     接收消息的进程编号
IN      tag      消息标签
IN      comm   通信子
2.       int MPI_Recv(void *buf,int count,MPI_Datatype datatype,int source,int tag,MPI_Comm comm,MPI_Status *status)
OUT      buf      接收消息数据的首地址
IN        Count    接收消息数组元素的最大个数
IN        datatype  接收消息的数据类型
IN        source    发送消息的进程编号
IN        tag       消息标签
IN        comm     通信子
OUT      status     接收消息时返回的状态
3.       int MPI_Get_Count(MPI_Status status,MPI_Datatype datatype,int *count)
IN      status      接收消息时返回的状态
IN      datatype    接收消息时返回的类型
OUT    Count       接收消息时数组元素的个数
4.       int MPI_Sendrecv(void *sendbuf,int sendcount,MPI_Datatype sendtype,int dest,int sendtag,void *recvbuf,int recvcount,MPI_Datatype recvtype,int source,int recvtag,MPI_Comm comm,MPI_Status *status)
IN      sendbuf      所要发送消息数据的首地址
IN      sendcount    发送消息数组元素的个数
IN      sendtype     发送消息的数据类型
IN      dest         接收消息的进程编号
IN      sendtag      发送消息标签
OUT    recvbuf       接收消息数据的首地址
IN      recvcount     接收消息数组元素的最大个数
IN      recvtype      接收消息的数据类型
IN      Source      发送消息的进程编号
IN      recvtag      接收消息标签
IN      comm       通信子
OUT    status       接收消息时返回的状态
5.       int MPI_Sendrecv_replace(void *sendbuf,int count,MPI_Datatype datatype,int dest,int sendtag,int source,int recving,MPI_Comm comm,MPI_Status *status)
OUT      buf      发送和接收消息数据的首地址
IN        Count    发送和接收消息数组元素的个数
IN        dest     接收消息的进程编号
IN        sendtag  发送消息标签
IN        source    发送消息的进程编号
IN        recvtag   接收消息标签
IN        comm    通信子
OUT      status    接收消息时返回的状态
6.       int MPI_probe(int source,int tag,MPI_Comm comm,MPI_Status *status)
IN      source      发送消息进程的编号
IN      tag         接收消息的标签
IN      comm      通信子
OUT    status       返回到消息的状态
7.       int MPI_Iprobe(int source,int tag,MPI_Comm comm,int *flag,MPI_Status *status)
IN      source      发送消息进程的编号
IN      tag         接收消息的标签
IN      comm      通信子
OUT     flag       如果指定消息已经到达,flag返回值为true
OUT    status      返回到达消息的状态
非阻塞式通信函数
非阻塞式通信函数是指在通信过程中,不需要等待通信结束就返回,通常这种通信过程交由计算机的后台来处理,如果计算机系统提供硬件支持非阻塞式通信函数,就可以使计算与通信在时间上的重叠,从而提高并行计算的效率。
1.       int MPI_Isend(void *buf,int count,MPI_Datatype datatype,int dest,int tag,MPI_Comm comm,MPI_Request *request)
IN      buf      所要发送消息数据的首地址
IN      count    发送消息数组元素的个数
IN      datatype  发送消息的数据类型
IN      dest     接收消息的进程编号
IN      tag      消息标签
IN      comm    通信子
OUT    request   请求句柄一杯将来查询
2.       int MPI_Irecv(void *buf,int count,MPI_Datatype datatype,int source,int tag,MPI_Comm comm,MPI_Request *request)
OUT      buf      接收消息数据的首地址
IN       Count     接收消息数组元素的个数
IN       datatype   接收消息的数据类型
IN       source     发送消息的进程编号
IN       tag        消息标签
IN       comm      通信子
OUT     request     请求句柄以北将来查询
MPI_Isend和MPI_Irecv不需要等待发送或接收消息完成就可以执行其他任务
3.       Int MPI_wait(MPI_Request *request,MPI_Status *status)
INOUT       request      请求句柄
OUT         status       发送或接收消息的状态
如果request所指的操作已经完成,MPI_Wait将结束等待状态
4.       Int MPI_Test(MPI_Request *request,int *flag,MPI_Status *status)
INOUT      request      请求句柄
OUT        flag         request所指的操作已经完成返回值为true
OUT        status       发送或接收消息的状态
5.       Int MPI_Request_free(MPI_Request *request)
INOUT      request      请求句柄,返回值为MPI_Request_null
对单个request进行查询
6.       Int MPI_Waitany(int count,MPI_Request *array_of_requests,int *index,MPI_Status *status)
IN      count      请求句柄的个数
INOUT   array_of_requests 请求句柄数组
OUT     index      已经完成通信操作的句柄指标
OUT     status     消息的状态
当所有请求句柄中至少有一个已经完成通信操作,就返回,如果有多于一个请求句柄已经完成,MPI_waitany将随机选择其中的一个并立即返回
7.       Int MPI_Testany(int Count,MPI_Request *array)
IN      count      请求句柄个数
INOUT   array_of_requests 请求句柄数组
OUT     index      已经完成通信操作的句柄指标
OUT     flag        如果有一个已经完成,则flag=true
OUT     status      消息的状态
无论有没有通信操作完成都将立即返回
8.       Int MPI_Waitall(int Count,MPI_Request *array_of_requests)
IN      count      请求句柄的个数
INOUT   array_of_requests 请求句柄数组
INOUT   array_of_status   所有消息的状态数组
所有通信操作完成之后才返回,否则将一直等待
9.       Int MPI_Testall(int Count,MPI_Request *array_of_requests,int *flag,MPI_Status *array_of_status)
IN      count      请求句柄的个数
INOUT   array_of_requests   请求句柄数组
OUT     flag       如果有一个没完成,则flag=false
INOUT   array_of_status 所有消息的状态数组
无论所有通信操作是否完成都立即返回
10.   Int MPI_Cancel(MPI_Request *request)
INOUT      request      请求句柄
取消一个发送或接收操作
11.   Int MPI_Test_cancelled(MPI_Status *status,int *flag)
IN         status      消息的状态
OUT        flag       如果已经取消,则flag=true
特殊的点到点通信函数
1.       Int MPI_Send_init(void *buf,int count,MPI_Datatype datatype,int dest,int tag,MPI_Comm comm,MPI_Request *request)
IN      buf      所要发送消息数据的首地址
IN      count    发送消息数组元素的个数
IN      datatype  发送消息的数据类型
IN      dest      接收消息的进程编号
IN      tag       消息标签
IN      comm    通信子
OUT    request   请求句柄以备将来查询
2.       Int MPI_Recv_init(void *buf,int count,MPI_Datatype  datatype,int source,int tag,MPI_Comm comm,MPI_Request *request)
OUT      buf      接收消息数据的首地址
IN        count    接收消息数组元素的个数
IN        datatype  接收消息的数据类型
IN        Source    发送消息的进程编号
IN        tag       消息标签
IN        comm    通信子
OUT      request   请求句柄以备将来查询
3.       Int MPI_Start(MPI_Request *request)
    INOUT      request      请求句柄
4.       Int MPI_Startall(int count,MPI_Request *array_of_request)
IN      Count      需要激活的请求句柄个数
INOUT  array_of_request  请求句柄数组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值