我正在MPI中实施一个程序,其中主过程(rank = 0)应该能够从其他过程中接收请求,这些过程要求仅根据root知道的变量值。如果我通过等级0将MPI_RECV(...)制作,我必须指定将请求发送到根的过程的等级,但是我无法控制这一点,....如何从任何等级中接收请求并使用发射过程的数量来发送必要的信息?

有帮助吗?

解决方案

假设您正在使用C。在C ++和Fortran中也有类似的概念。您只会指定 MPI_ANY_SOURCE 作为来源 MPI_recv(). 。状态结构包含消息的实际来源。

int buf[32];
MPI_Status status;
// receive message from any source
MPI_recv(buf, 32, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
int replybuf[];
// send reply back to sender of the message received above
MPI_send(buf, 32, MPI_INT, status.MPI_SOURCE, tag, MPI_COMM_WORLD);

其他提示

mpi_any_source是明显的答案。

但是,如果所有等级都将向等级发送请求,则MPI_IRECV与MPI_TESTALL结合使用也可能是一种模式。这将允许按任何顺序执行MPI_SEND呼叫,并且可以按照MPI_IRECV调用的顺序接收和处理信息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top