3.2.5 返回状态 BACKWARDFORWARD


如果接收操作中使用任意值, 那么可以不知道一个被接收消息的source 或tag。这个信息被MPI_RECV的status(状态)返回。status的类型是MPI定义的。状态变量须由用户显示分配, 即, 他们不是系统对象。   

在C语言中, status是一个结构, 其包含两个域, 名字为 MPI_SOURCE和MPI_TAG, 该结构可以包含附加域。所以,status.MPI_SOURCE 和status.MPI_TAG分别包含被接收消息的源和目的。   

Fortran中,status是一个MPI_STATUS_SIZE大小的INTEGER型数组。两个常量MPI_SOURCE和MPI_TAG是存储源和标识域的下标号。所以,status(MPI_SOURCE)和status(MPI_TAG)分别包含被接收消息的源和标识。

这个状态参数也返回关于被接收消息的长度信息。但是,这个信息不能作为状态变量的一个域被直接得到,要求对MPI_GET_COUNT的调用“解码”这个信息。

MPI_GET_COUNT(status,datatype,count)

IN status 接收操作的返回状态

(Status) IN datatype 每个接收缓存元素的数据类型

(handle) OUT count 被接收元素的个数(integer)

int MPI_Get_count(MPI_Status status, MPI_Datatype datatype, int *count)

MPI_GET_COUNT(STATUS, DATATYPE, COUNT, IERROR)

INTEGER STATUS(MPI_STATUS_SIZE), DATATYPE, COUNT, IERROR

返回被接收元素的个数。( 再一次注意,我们以元素而不是字节来计数)这个datatype 参数应与设置 status 变量的接收调用提供的参数匹配。( 我们在后面3.12.5节可以看到, 在某些情况下, MPI_GET_COUNT可以返回值MPI_UNDEFINED。)

所有的发送和接收操作都以这节描述的阻塞MPI_SEND和MPI_RECV操作同样的方式使用buf, count, datatype, source, dest, tag, comm和status参数。


Copyright: NPACT
BACKWARDFORWARD