常用的MPI函数

来源:互联网 发布:nodejs解析json.parse 编辑:程序博客网 时间:2024/05/30 23:09
int MPI_Init(int *argc, char ***argv)     MPI初始化函数

int MPI_Finalize(void)     MPI结束函数

int MPI_Comm_rank(MPI_Comm comm, int *rank)     当前进程的标识;
这一调用返回调用进程在给定的通信域中的进程标识号。有了这一标识号,不同的进程
就可以将自身和其它的进程区别开来,实现各进程的并行和协作。

int MPI_Comm_size(MPI_Comm comm, int *size)     通信域包含的进程数;
这一调用返回给定的通信域中所包括的进程的个数,不同的进程通过这一调用得知在给定的通信域中一共有多少个进程在并行执行。

int MPI_Send(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)               消息发送;
MPI_SEND
将发送缓冲区中的count datatype数据类型的数据发送到目的进程目的进程,在通信域中的标识号是 dest ,本次发送的消息标志是tag ,使用这一标志就可以把本次发送的消息和本进程向同一目的进程发送的其它消息区别开来。
MPI_SEND操作指定的发送缓冲区是由 count个类型为datatype 的连续数据空间组成。起始地址为 buf。注意这里不是以字节计数而是以数据类型为单位指定消息的长度,这样就独立于具体的实现并且更接近于用户的观点。
其中datatype数据类型可以是 MPI的预定义类型也可以是用户自定义的类型。

int MPI_Recv(void* buf, int count, MPI_Datatype datatype, int source, int tag,MPI_Comm comm, MPI_Status *status)     消息接收。
接收缓冲区是由 count个类型为datatype 的连续元素空间组成。由 datatype指定其类型,起始地址为 buf ,接收到消息的长度必须小于或等于接收缓冲区的长度。这是因为如果接收到的数据过大, MPI没有截断,接收缓冲区会发生溢出错误,因此编程者要保证接收缓冲区的长度不小于发送数据的长度。如果一个短于接收缓冲区的消息到达,那么只有相应于这个消息的那些地址被修改。 count可以是零,这种情况下消息的数据部分是空的。

返回状态status   返回状态变量 status用途很广,它是MPI定义的一个数据类型,使用之前需要用户为它分配空间C实现中,状态变量是由至少三个域组成的结构类型,这三个域分别是:MPI_SOURCEMPI_TAGMPI_ERROR它还可以包括其它的附加域。这样通过对status.MPI_SOURCE,status.MPI_TAG status.MPI_ERROR的引用就可以得到返回状态中
所包含的发送数据进程的标识,发送数据使用的 tag标识和本接收操作返回的错误代码。

int MPI_Barrier(MPI_Comm);
表示阻止调用直到communicator中所有进程完成调用。就是说,任意一次进程的调用只能在所有communicator中的成员已经开始调用之后进行。

int MPI_Abort(MPI_Comm comm, int errorcode)
comm 退出进程所在的通信域
errorcode 返回到所嵌环境的错误码
MPI_ABORT使通信域comm 中的所有进程退出本调用。并不要求外部环境对错误码采取
任何动作。

int MPI_Reduce(void* sendbuf, void* recvbuf, int count, PI_Datatype datatype,
MPI_Op op, int root, MPI_Comm comm)
IN sendbuf 发送消息缓冲区的起始地址 (可选数据类型)
OUT recvbuf 接收消息缓冲区中的地址 (可选数据类型)
IN count 发送消息缓冲区中的数据个数 (整型)
IN datatype 发送消息缓冲区的元素类型 (句柄)
IN op 归约操作符( 句柄)
IN root 根进程序列号(整型 )
IN comm 通信域( 句柄)
MPI_REDUCE将组内每个进程输入缓冲区中的数据按给定的操作 op进行运算并将其
结果返回到序列号为 root的进程的输出缓冲区中

int MPI_Bcast(void* buffer,int count,MPI_Datatype datatype,int root, MPI_Comm comm)
IN/OUT buffer    通信消息缓冲区的起始地址(可变)
IN    count    通信消息缓冲区中的数据个数(整型)
IN    datatype  通信消息缓冲区中的数据类型(句柄)
IN    root    发送广播的根的序列号(整型)
IN    comm    通信子(句柄)
MPI_BCAST是从一个序列号为root的进程将一条消息广播发送到组内的所有进程,包括它本身在内.调用时组内所有成员都使用同一个comm和root,其结果是将根的通信消息缓冲区中的消息拷贝到其他所有进程中去。在 MPI程序中就不能用 MPI_Recv去和 MPI_Bcast相匹配,MPI_Bcast 是集合操作,在每一个进程中都必须有相应的 MPI_Bcast语句,而不是 MPI_Recv 语句


1 0