В зависимости от природы вызываемой функции MPI_ * отправка будет блокироваться до тех пор, пока другой процесс не вызовет соответствующий прием, поэтому вам необходимо убедиться, что это произойдет в вашем коде.
Существуют также неблокирующие вызовы функций MPI_Isend f.ex, которые дают вам дескриптор запроса, который вы можете проверить позже, чтобы увидеть, был ли посыл процесса получен соответствующим получателем.
Что касается вашей проблемы, вы можете выдавать неблокирующее получение (MPI_Irecv является самым основным) и проверять состояние каждые n секунд в зависимости от вашего приложения. Затем статус будет установлен как завершенный, когда сообщение получено и готово к прочтению.
Если это чувствительно ко времени, используйте блокирующий вызов во время ожидания сообщения. Однако механизм блокировки (по крайней мере, в OpenMPI) использует вращающийся опрос, поэтому процесс ожидания будет потреблять 100% ресурсов процессора.