如何从MPI_Irecv消息中检索标签?

时间:2018-10-04 03:48:20

标签: c mpi

我知道我可以使用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,但是它不起作用,而是给了我一条错误消息。

1 个答案:

答案 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()