MPI_函数
rank size MIP_Get_processor_name
send and recv MPI_Status
因为有了recv函数使得装数据的变量的名字可以改变(内存的地址没变)
isend and irecv and wait MPI_Requst
reduce(规约)
boast
(广播----将所有的同名的变量的值覆盖) 阻塞接受 通过复制缓存区的数据实现
gather (收集)
结果就像一个组中的n个进程(包括根进程在内)都执行了一个调用:
MPI_Send(sendbuf, sendcount, sendtype, root, ...),
同时根进程执行了n次调用:
MPI_Recv(recvbuf+irecvcountextent(recvtype), recvcount, recvtype, i,...),
结果使得函数更加的简便 recvbuffer 一定要 = malloc(sizeof(MPI_Datatype) * numprocs * count(count为数据的个数))
收集到的结果会在recvbuffer中首尾相接
scatter (散发)
MPI_Scatter(
void* send_data,//存储在0号进程的数据,array
int send_count,//具体需要给每个进程发送的数据的个数
//如果send_count为1,那么每个进程接收1个数据;如果为2,那么每个进程接收2个数据
MPI_Datatype send_datatype,//发送数据的类型
void* recv_data,//接收缓存,缓存 recv_count个数据
int recv_count,
MPI_Datatype recv_datatype,
int root,//root进程的编号
MPI_Comm communicator)
/---------------------------------------MPI_Scatter函数详解-----------------------------/
####功能:
通过根进程向同一个通信域中的所有进程发送数据,将数据发送缓冲区的数据分割成长度相等的段,然后分段发送数据给每个进程,如果每段包含N个数据,则向进程i发送的段为[send[i*N],int[i*N+N])
####函数参数:
MPI_Scatter(待发送数据缓冲区地址,数据个数,数据类型,接收缓冲区地址,数据个数, 数据类型,发送消息的进程的标识,通信域)
MPI_Scatter(send, N, MPI_INT,recv, N, MPI_INT, 0, MPI_COMM_WORLD);
barrier (同步)
等到所有进程都完成这个函数的调用后才能让程序继续进行,相当于有一个挡板,等所有的程序在同一起跑线时才放开挡板
MPI_Comm_group -> get a world_group(从初始组中诞生的新组,根据这个新组得到其他的组) MPI_Group_rank() -> get world_group_rank
MPI_Group_incl() (建立包含的组) incl -> include
MPI_Group old_group : 旧进程组;
int count : members数组中元素的个数;
int *members : 旧进程组中需要放入新进程组的进程的编号;
MPI_Group *new_group : 新进程组;
members[]装的是要构成新的组的编号,*members中只要将members作为地址放入就好 ==要自己设一个members数组==
>不属于这个组的进程中输出这个值,MPI_Group_rank会返回MPI_UNDEFINED作为group_rank的值,表示它不是 worker_group的成员,在MPICH里是-32766。
MPI_Group_excl() (建立不包含的组)
int MPI_Group_excl(MPI_Group old_group, int count, int *nonmembers, MPI_Group *new_group)
MPI_Group old_group : 旧进程组;
int count : nonmembers数组中元素的个数;
int *nonmembers : 旧进程组中不需要放入新进程组的进程的编号;
MPI_Group *new_group : 新进程组;
group_free (通讯组的释放)
group_compare (组的比较)
int MPI_Group_compare(MPI_Group group1, MPI_Group group2, int *result)
MPI_Group group1 : 要比较的组1;
MPI_Group group2 : 要比较的组2;
int *result:结果;
如果在两个组中成员和次序完全相等,返回MPI_IDENT。例如在group1和group2是同一句柄时就会发生这种情况。如果组成员相同而次序不同则返回MPI_SIMILAR,否则返回MPI_UNEQUAL。

浙公网安备 33010602011771号