Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从MPI\U Irecv消息中检索标记?_C_Mpi - Fatal编程技术网

如何从MPI\U Irecv消息中检索标记?

如何从MPI\U Irecv消息中检索标记?,c,mpi,C,Mpi,我知道我可以使用status.MPI\u tag获取MPI\u Recv消息的标记,如下所示: 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\u Irecv消息的标记 int buffer[2]; MPI_Request request;

我知道我可以使用
status.MPI\u tag
获取
MPI\u Recv
消息的标记,如下所示:

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\u Irecv
消息的标记

int buffer[2];
MPI_Request request;
MPI_Irecv(&buffer[0], 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, globalComm, &request);

我尝试使用
request.MPI_标记
,但它不起作用,而是给了我一条错误消息。

该标记仅在收到消息时可用, 因此,当
MPI\u 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\u Test()
MPI\u Probe()

Hi,如果使用MPI\u Wait(&request,&status),它基本上会等待消息被接收。如果我在循环中使用了MPI_Irecv和MPI_Wait,那么在收到消息之前,代码不会退出循环。我该如何预防呢?深呼吸,后退一步。除非你有一个水晶球,否则你无法猜测下一条消息的标签是什么。有道理吗?如果最后你认为你需要一个水晶球,那么你的算法有问题。
MPI_-Irecv()
填充一个请求数组和循环外部的单个
MPI_-Waitall()
会起作用吗?应该注意的是,
MPI_-Request
是一个不透明的句柄,您无法直接访问它。也就是说,请不要问它不起作用/给了我一个没有包括具体错误的错误。