我對於何時應該調用MPI_Wait(或其他變體,如:MPI_Waitall,MPII_Waitsome等)有點困惑。請考慮以下幾種情況:(注:僞代碼)MPI_wait何時需要使用非阻塞呼叫?
案例(1)
MPI_Isend (send_buffer, send_req);
// Do local work
MPI_Probe (recv_msg);
MPI_Irecv (recv_buffer, recv_req);
// wait for msgs to finish
MPI_Wait (recv_req); // <--- Is this needed?
MPI_Wait (send_req); // <--- How about this?
所以我的困惑來自MPI_Probe
梗在這種情況下。由於這是一個阻塞呼叫,是不是意味着它會阻止呼叫者,直到收到消息?如果是這種情況,那麼我認爲MPI_Waits在這裏是不必要的。
以下情況如何?
情況(2)
MPI_Isend (send_buffer, send_req);
// Do local work
MPI_Probe (recv_msg);
MPI_Recv (recv_buffer);
// wait for msgs to finish
MPI_Wait (send_req); // <--- Is this necessary?
到第一殼體類似的但MPI_Irecv
被替換其阻擋版本。在這種情況下,消息肯定是由時收到MPI_Wait
被稱爲這意味着MPI_Isend
必須已經完成......
另外,作爲一個單獨的問題,有什麼事我們的意思,當我們說MPI_Probe
阻止?在進程接收到所有消息之前它是否阻塞,還是隻在接收到「元數據」(例如消息大小,發送者級別等)之前阻塞?換句話說,是MPI_Probe
+ MPI_Irecv
比MPI_Probe
+ MPI_Recv
更好嗎?
由於此問題已在SciComp上得到解答(http://scicomp.stackexchange.com/questions/8308/when-is-mpi-wait-necessary-for-non-blocking-calls),您應該關閉此問題。不需要重複的答案。 –
已經在這裏詢問:http://scicomp.stackexchange.com/questions/8308/when-is-mpi-wait-necessary-for-non-blocking-calls – GradGuy