MPI_Recv包含源列表

时间:2012-04-17 15:29:27

标签: c fortran mpi

是否可以将一个源列表传递给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

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

1 个答案:

答案 0 :(得分:1)

不是这样的。但是,您可以将MPI_Probe()MPI_ANY_SOURCE一起使用,然后将MPI_SOURCE对象的status字段与您希望从中接收的进程列表进行比较。如果匹配,您可以继续从该来源接收定期阻止接收。