将MPI_IProbe与MPI_Irecv一起使用

时间:2014-08-06 20:53:17

标签: c++ mpi nonblocking

我有一个代码,每个处理器都需要检查它是否有任何要接收的消息(可能是多条消息),并为每条消息发布非阻塞接收。我想知道在发布Irecv之后MPI_Iprobe的返回值是多少,但尚未完成。即:

MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag, &status);
while(flag)
{
   MPI_Get_count(&status, MPI_DOUBLE, &count);
   MPI_Irecv(&Receive_buffer[index], count, MPI_DOUBLE, status.MPI_SOURCE, status.MPI_TAG, MPI_COMM_WORLD, &Request[index]);
   MPI_Iprobe(MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &flag, &status);
}

现在,我相信MPI_Iprobe在MPI_Irecv完成之前返回true。调查是否有办法转移到需要接收的任何其他消息?每个进程都不知道要事先检查多少消息,所以我不能只使用几个MPI_Probe。

0 个答案:

没有答案