C 对于非阻塞呼叫,何时需要MPI_等待?

C 对于非阻塞呼叫,何时需要MPI_等待?,c,mpi,hpc,C,Mpi,Hpc,我对何时应该调用MPI_Wait(或其他变体,如:MPI_Waitall、MPI_Waitsome等)有点困惑。请考虑以下情况:(注:伪代码) 案例(1) 与第一种情况类似,但MPI_Irecv被其分块版本替换。在这种情况下,消息肯定在调用MPI\u Wait时收到,这意味着MPI\u Isend必须已完成 另外,作为一个单独的问题,当我们说MPI\u探测是阻塞时,我们的意思是什么?它是阻塞直到进程接收到所有消息,还是只阻塞直到接收到“元数据”(如消息大小、发送者排名等)?换句话说,MPI_Pr

我对何时应该调用MPI_Wait(或其他变体,如:MPI_Waitall、MPI_Waitsome等)有点困惑。请考虑以下情况:(注:伪代码)

案例(1)

与第一种情况类似,但MPI_Irecv被其分块版本替换。在这种情况下,消息肯定在调用
MPI\u Wait
时收到,这意味着
MPI\u Isend
必须已完成


另外,作为一个单独的问题,当我们说
MPI\u探测
是阻塞时,我们的意思是什么?它是阻塞直到进程接收到所有消息,还是只阻塞直到接收到“元数据”(如消息大小、发送者排名等)?换句话说,
MPI_Probe
+
MPI_Irecv
MPI_Probe
+
MPI_Recv

只有当您想要异步接收数据时,如果启动各种异步读取,您需要使用“MPI_Wait”函数或MPI_Waitall。问题是MPI_Wait是一个阻塞调用。如果您想要无阻塞,您应该使用MPI_测试来检查功能的完成情况


在您的情况下,MPI_探测器将阻塞,直到收到消息。所以我想说,在你的情况下,你打电话给MPI_Probe是没有必要的

因为这个问题已经在SciComp()上得到了回答,所以应该结束这个问题。无需重复回答。已在此处询问:
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_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?