<p>It is a misconception that non-blocking communication was motivated by performance: it was mostly to be able to be able to express deadlock/serialization-free communication patterns. (Indeed, actually getting overlap of communication/computation was only possible through the &quot;Iprobe trick&quot;. Only recently with &quot;progress threads&quot; has it become a more systematic possibility.)</p>
<p>Partitioned communication is intended for multi-threaded contexts. You may call that a performance argument, or a completely new use case.</p>
<p>Persistent sends have indeed the potential for performance improvement, since various setups and buffer allocations can be amortized. However, I don't see much evidence that MPI implementations actually do this. <a href="https://arxiv.org/abs/1809.10778" rel="nofollow noreferrer">https://arxiv.org/abs/1809.10778</a></p>
<p>Finally, you're missing buffered, synchronized, and ready sends. These indeed have the potential to improve performance, though again I don't see much evidence that they do.</p>
How do the different types of point to point communication in MPI differ in terms of performance?
<p>The latest version of MPI includes these types of point to point (p-p) communication:</p>
<ul>
<li>blocking</li>
<li>ordinary non-blocking</li>
<li>persistent non-blocking</li>
<li>partitioned non-blocking</li>
</ul>
<p>As far as I know, historically blocking p-p communication was the first type that existed. Then different types of non-blocking p-p communication were introduced one after the other to increase performance. For example, they allow overlap of computation and communication. But are there cases where blocking p-p communication is actually faster than the non-blocking alternatives? If no, what does justify their existence? Simply backward compatibility and their simplicity of use?</p>