1

是否可以将源列表传递给 MPI_Recv(或等效)调用?目前,我的代码看起来像:

do i=nod1,nod2
    call mpi_recv(tmp,n,MPI_REAL,MPI_ANY_SOURCE,tag,MPI_COMM_WORLD,status,ierr)
    ... do stuff with tmp here
    call mpi_send(tmp,n,MPI_REAL,status(MPI_SOURCE),tag,MPI_COMM_WORLD,ierr)
enddo

当然,这并不能保证它会做我想要的。(如果 nod1 在 nod2 可以发送一条消息之前在这里发送了两条消息,那么在此迭代期间不会收到 nod2 的消息,这会很糟糕。)在我的应用程序中,这不会发生,因为 nod1 和 nod2 有其他约束迫使他们彼此同步(足够)......但这让我想知道是否有办法指定允许接收的proc列表。

4

1 回答 1

1

不是这样的。但是,您可以使用MPI_Probe()with MPI_ANY_SOURCE,然后将对象的MPI_SOURCE字段与status您希望从中接收的进程列表进行比较。如果有匹配项,您可以通过常规阻塞接收继续从该源接收。

于 2012-04-17T15:38:22.577 回答