【发布时间】:2014-02-17 03:39:09
【问题描述】:
我有一个应用程序,其中每个处理器需要将数据发送到特定数量的处理器,并从未知数量的处理器接收数据,数据大小未知,同时执行本地操作。这就是我的想法:
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_Wait 之后使用MPI_Barrier 会解决问题吗?
我还有哪些其他选择可以解决这个问题?
【问题讨论】:
标签: c mpi distributed-computing hpc