<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><div dir="ltr">Hi MPIers,<br><br>I have some questions regarding MPI_Isend() and MPI_Recv(). MPICH-3.1.3 is used to compile and run the attached code on Red Hat Enterprise Linux 6.3 (a shared memory machine). While n = 9999, the MPI_Recv() finishes immediately after MPI_Isend(): (This is what I understand and expect)<br><br>MPI 1: Recv started at 09:53:53.<br>MPI 0: Isend started at 09:53:53.<br>MPI 1: Recv finished at 09:53:53.<br>MPI 0: Isend finished at 09:53:58.<br><br>When n = 99999, I get the following. The MPI_Recv() finishes after MPI_Wait():<br><br>MPI 1: Recv started at 09:47:56.<br>MPI 0: Isend started at 09:47:56.<br>MPI 0: Isend finished at 09:48:01.<br>MPI 1: Recv finished at 09:48:01.<br><br>But with OpenMPI 1.8 and n = 99999, MPI_Recv() finishes immediately after MPI_Isend():<br><br>MPI 0: Isend started at 09:55:28.<br>MPI 1: Recv started at 09:55:28.<br>MPI 1: Recv finished at 09:55:28.<br>MPI 0: Isend finished at 09:55:33.<div><br></div><div>Am I misunderstanding something here? In case the attached code is dropped, the code is included. Thanks in advance.</div><div><br></div><div><br></div><div><div><font face="courier new, monospace">#include "mpi.h"</font></div><div><font face="courier new, monospace">#include <unistd.h></font></div><div><font face="courier new, monospace">#include <stdio.h></font></div><div><font face="courier new, monospace">#include "vector"</font></div><div><font face="courier new, monospace">#include <time.h></font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">int main(int argc, char* argv[])</font></div><div><font face="courier new, monospace">{</font></div><div><font face="courier new, monospace">  MPI_Init(&argc, &argv);</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  int rank;</font></div><div><font face="courier new, monospace">  MPI_Comm_rank(MPI_COMM_WORLD, &rank);</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  int n = 9999;</font></div><div><font face="courier new, monospace">  std::vector<int> vec(n);</font></div><div><font face="courier new, monospace">  MPI_Request mpiRequest;</font></div><div><font face="courier new, monospace">  MPI_Status mpiStatus;</font></div><div><font face="courier new, monospace">  char tt[9] = {0};</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  MPI_Barrier(MPI_COMM_WORLD);</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  if (rank == 0)</font></div><div><font face="courier new, monospace">  {</font></div><div><font face="courier new, monospace">    MPI_Isend(&vec[0], n, MPI_INT, 1, 0, MPI_COMM_WORLD, &mpiRequest);</font></div><div><font face="courier new, monospace">    time_t t = time(0);</font></div><div><font face="courier new, monospace">    strftime(tt, 9, "%H:%M:%S", localtime(&t));</font></div><div><font face="courier new, monospace">    printf("MPI %d: Isend started at %s.\n", rank, tt);</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">    //int done = 0;</font></div><div><font face="courier new, monospace">    //while (done == 0)</font></div><div><font face="courier new, monospace">    //{</font></div><div><font face="courier new, monospace">    //  MPI_Test(&mpiRequest, &done, &mpiStatus);</font></div><div><font face="courier new, monospace">    //}</font></div><div><font face="courier new, monospace">    sleep(5);</font></div><div><font face="courier new, monospace">    MPI_Wait(&mpiRequest, &mpiStatus);</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">    t = time(0);</font></div><div><font face="courier new, monospace">    strftime(tt, 9, "%H:%M:%S", localtime(&t));</font></div><div><font face="courier new, monospace">    printf("MPI %d: Isend finished at %s.\n", rank, tt);</font></div><div><font face="courier new, monospace">  }</font></div><div><font face="courier new, monospace">  else</font></div><div><font face="courier new, monospace">  {</font></div><div><font face="courier new, monospace">    time_t t = time(0);</font></div><div><font face="courier new, monospace">    strftime(tt, 9, "%H:%M:%S", localtime(&t));</font></div><div><font face="courier new, monospace">    printf("MPI %d: Recv started at %s.\n", rank, tt);</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">    MPI_Recv(&vec[0], n, MPI_INT, 0, 0, MPI_COMM_WORLD, &mpiStatus);</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">    t = time(0);</font></div><div><font face="courier new, monospace">    strftime(tt, 9, "%H:%M:%S", localtime(&t));</font></div><div><font face="courier new, monospace">    printf("MPI %d: Recv finished at %s.\n", rank, tt);</font></div><div><font face="courier new, monospace">  }</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  MPI_Finalize();</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  return 0;</font></div><div><font face="courier new, monospace">}</font></div><div><br></div><br><br>Best regards,<br>Zhen<br><div>
</div></div></div>