我对于何时应该调用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