我有一个代码,每个处理器都需要检查它是否有任何要接收的消息(可能是多条消息),并为每条消息发布非阻塞接收。我想知道在发布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。