1
是否有可能拥有传递给MPI_Recv(或等效)调用的源的列表?目前,我的代码看起来像这样:带有源列表的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有其他约束迫使它们与对方同步(足够)......但它让我想知道是否有办法指定允许从中接收的特效列表。
我想知道...... MPI_Probe保证只返回一次有关消息的信息吗?如果它探测并收到“坏消息”会发生什么?然后,我必须再次进行调查,直到找到“良好”的消息,但它是否不会返回有关“不良”消息的信息? – mgilson 2012-04-17 16:11:05
基本上,Probe做的是告诉你如果你叫Recv会发生什么。但是,它不会丢弃消息,并且因为MPI中的消息不超车,所以重复的探测器会一遍又一遍地探测同一消息。如果这是一个问题,您可以随时循环访问您希望收到的所有等级,并单独进行探测。 – suszterpatt 2012-04-17 17:37:04
是的,我意识到我可以做到这一点,但是自从MPI_Probe被阻塞后,就出现了问题 - 如果我在MPI_Probe中指定了一个proc编号,我又一次强制接收到消息的顺序。我想唯一的解决方案是发布N个MPI_Iprobes(每个proc都有一个)并测试这些探测是否已经回来 - 看起来这是一个简单/常见的情况,以至于会有一种更简单的方法来实现它。 – mgilson 2012-04-17 17:42:53