0
我有一個應用程序,其中每個處理器需要發送數據到特定數量的處理器,並從未知數量的未知數據大小的處理器接收數據,而這些處理器都是在執行本地操作的同時。這是我的想法:MPI_Iprobe何時會返回true?
MPI_Isend(...)
// Do local computation
MPI_Wait(...)
int flag;
MPI_Status st;
MPI_Iprobe(MPI_ANY_SOURCES, tag, &flag, comm, &st);
While(flag) {
MPI_Irecv(st.MPI_SOURCE,...);
MPI_Iprobe(MPI_ANY_SOURCES, tag, &flag, comm, &st);
}
我保證說MPI_Iprobe
在這種情況下,將能夠找到發送的消息的每一個?我懷疑如果當前的等級有更少的工作要做,它會在其他處理器有足夠的時間來實際發送消息之前達到MPI_Iprobe
,在這種情況下,我會錯過一些消息。那樣的話,MPI_Wait
之後會用MPI_Barrier
來解決問題嗎?
還有什麼其他選擇可以解決這個問題?
問題是單個消息的數量,它們的來源和所有消息大小都是未知的。這意味着我不能使用'MPI_Probe'(我想),因爲我無法知道應該多少次調用它。如果我不必要地稱它,那麼這個過程將永遠停滯!至於接收,我使用'MPI_Irec'來允許計算/通信重疊。令我困惑的是我並不完全知道'MPI_Iprobe'確定消息已經「到達」 – GradGuy