3.5.1. Overview

The most general communication method uses MPI_IMPROBE to learn the size of incoming MPI messages, to learn which task a message is aimed for, and its sequence number. After receiving a reply from MPI_IMPROBE, a buffer is allocated, a non-blocking `MPI_IMRECV is issued, and the message is received and unpacked.

On systems that do not support the MPI_IMPROBE protocol it can be replace with a dual-package protocol, where the 1st package contains information about the size of the 2nd package.

Threads can either split their work between updating tasks and handling MPI messages, or a few threads can be set aside to exclusively work on sending and receiving, thus minizing the latency associated with task updates.