我知道我可以使用MPI_Recv
来获得status.MPI_TAG
消息的标签,如下所示:
MPI_Recv(&buffer, 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, globalComm, &status);
printf("The tag I received is %d\n",status.MPI_TAG);
现在,如何获取MPI_Irecv
邮件的标签?
int buffer[2];
MPI_Request request;
MPI_Irecv(&buffer[0], 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, globalComm, &request);
我尝试使用request.MPI_TAG
,但是它不起作用,而是给了我一条错误消息。
答案 0 :(得分:2)
该标记仅在收到消息后可用,
因此它可能在MPI_Irecv()
返回时不可用。
完整序列是
MPI_Irecv(&buffer[0], 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, globalComm, &request);
// whatever you have to do
MPI_Wait(&request, &status);
// now the tag is in status.MPI_TAG
请注意,您还可以使用其他子例程来检查是否已收到消息(主要示例是MPI_Test()
和MPI_Probe()
)