MPI_Iprobe何时返回true?

时间:2014-01-26 08:57:00

标签: c mpi distributed-computing hpc

我有一个应用程序,其中每个处理器都需要将数据发送到特定数量的处理器,并从未知数据大小的未知数量的处理器中回收数据,同时执行本地操作。这就是我的想法:

MPI_Isend(...)
// Do local computation
MPI_Wait(...)

int flag;
MPI_Status st;
MPI_Iprobe(MPI_ANY_SOURCES, tag, &flag, comm, &st);
While(flag) {
    MPI_Irecv(st.MPI_SOURCE,...);
    MPI_Iprobe(MPI_ANY_SOURCES, tag, &flag, comm, &st);
}

我保证在这种情况下MPI_Iprobe能够找到发送的每条消息吗?我怀疑如果当前排名的工作量较少,那么在其他处理器有足够的时间实际发送消息之前,它将达到MPI_Iprobe,在这种情况下我会遗漏一些消息。在这种情况下,MPI_Barrier解决问题后会使用MPI_Wait吗?

我还有哪些其他方法可以解决这个问题?

1 个答案:

答案 0 :(得分:1)

除非我误解了您的问题,否则您可以使用常规MPI_PROBE。这将阻止等待消息实际到达。

但是,我不确定为什么你需要使用探测器。从您的示例代码中可以看出,使用常规MPI_RECVMPI_ANY_SOURCE可以很好。 MPI_RECV不需要命名来源。