title: MPI_Barrier with MPI_Gather using small vs. large data set sizes?
body: <p>I've been using MPI_Scatter / MPI_Gather for a variety of parallel computations. One thing I've noticed is that MPI_Barrier() is often called to synchronize processors, akin to the OpenMP barrier directive. I was tweaking my code for a project and commented out my MPI_Barrier() lines below, and found that the computations were still correct. Why is this the case? I can understand why the first MPI_Barrier() is needed- the other processors don't need to wait; as soon as they get the data from processor MASTER they can begin computations. But is MPI_Barrier ever needed AFTER an MPI_Gather, or does MPI_Gather already have an implicit barrier within?</p>
  
  <p>Edit: does the size of the data being processed matter in this case?</p>
  
  <pre><code>MPI_Scatter(&amp;sendingbuffer,sendingcount,MPI_FLOAT,receivingbuffer,sendcount,
  MPI_INT,MASTER_ID,MPI_COMM_WORLD);
  
  // PERFORM SOME COMPUTATIONS
  MPI_Barrier(); //&lt;--- I understand why this is needed
  
  MPI_Gather(localdata,sendcount, MPI_INT, global,sendcount, MPI_INT, MASTER_ID, MPI_COMM_WORLD);
  //MPI_Barrier(); &lt;------ is this ever needed?
  </code></pre>