在空間分解的2D域中,我需要將粒子發送給8個鄰居。我知道我送了多少,但不知道我會從這些鄰居收到多少。 我已經用MPI_Send(),MPI_Probe()和MPI_Recv()實現了一個代碼,但是我意識到只要消息太大就會導致死鎖。未知郵件大小的MPI非阻塞發送和recv和mpi_iprobe()
我決定進行非阻塞通信,但後來我不知道應該調用MPI_Isend,MPI_Irecv和MPI_Iprobe的順序?在實際調用MPI_Irecv之前,我肯定需要知道接收緩衝區的大小,所以我被MPI_Isend(),MPI_Iprobe()和MPI_Irecv())所誘惑,但問題是MPI_Iprove()總是返回一個標誌等於假,我陷入了while循環。據我瞭解,MPI在調用MPI_Wait()之前沒有義務完成發送,因此我明白MPI_Iprobe可能永遠不會返回true。但是,如果是這樣,在非阻塞MPI點對點通信中,如何收到未知大小的消息?
沒錯,謝謝!我已經使用MPI_Probe和MPI_Recv進行了測試,效果很好。我不太清楚我明白爲什麼MPI_Probe不會阻塞。信息何時發送,究竟發生了什麼? – MCF
對不起,重複的答案/評論。新的SE ios應用程序在答案和評論上並不完全清楚。 –