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