MPI_Recv 函数
执行接收操作,在收到匹配消息之前不会返回 。
语法
int MPIAPI MPI_Recv(
_In_opt_ void *buf,
int count,
MPI_Datatype datatype,
int source,
int tag,
MPI_Comm comm,
_Out_ MPI_Status *status
);
参数
buf [in, optional]
指向包含要发送的数据的缓冲区的指针。计数
缓冲区中元素的数目。 如果消息的数据部分为空,请将 count 参数设置为 0。datatype
缓冲区数组中元素的数据类型。source
指定通信器内发送进程的排名。 指定 MPI_ANY_SOURCE 常量,以指定任何源都是可接受的。标签
用于区分不同类型的消息的消息标记。 指定 MPI_ANY_TAG 常量以指示任何标记都是可接受的。comm
通信器的句柄。status [out]
返回时,包含指向 MPI_Status 结构的指针,其中存储了有关接收的消息的信息。
返回值
返回成功 时MPI_SUCCESS 。 否则,返回值为错误代码。
在 Fortran 中,返回值存储在 IERROR 参数中。
Fortran
MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, IERROR)
<type> BUF(*)
INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS(MPI_STATUS_SIZE), IERROR
注解
收到的消息的长度必须小于或等于接收缓冲区的长度。 如果所有传入数据都不适合接收缓冲区,此函数将返回溢出错误。
如果收到的消息短于缓冲区,则仅修改与消息对应的缓冲区部分。 不修改缓冲区的其余部分。
进程可以向自身发送消息。 但是,使用阻止发送和接收操作( MPI_Send 和 MPI_Recv)这样做是不安全的,因为这些阻止发送和接收操作可能会导致死锁。
注意
发送和接收操作之间存在不对称。 接收操作可以接受来自任意发送方的消息,但发送操作必须指定唯一的接收方。 这实现了一种推送式通信,其中数据传输由发送方影响,而不是由接收方执行数据传输的拉取样式。
要求
产品 |
HPC Pack 2012 MS-MPI 可再发行程序包、HPC Pack 2008 R2 MS-MPI 可再发行程序包、HPC Pack 2008 MS-MPI 可再发行程序包或 HPC Pack 2008 客户端实用工具 |
标头 |
Mpi.h;Mpif.h |
库 |
Msmpi.lib |
DLL |
Msmpi.dll |