MPI_Send отправляет данные и блокирует процесс пока передаваемые данные не будут скопированы в некоторый буфер. И этой функции абсолютно не важно, примут ее данные или нет, то есть не обязательно должен быть принимающий где-то MPI_Recv.
В наших лекциях, есть примеры взаимной блокировки при неправильном использовании MPI_Send и MPI_Recv
В 1 блокировки нет, в 3 согласен оба процесса ожидают данные, но почему блокировка во 2? Мне кажется каждый из них абсолютно честно скопирует данные в буфер, и продолжит выполнение. Извиняюсь, как вообще эта функция может взаимнозаблокироваться, если она ожидает лишь пока данные загрузятся в буфер, а не ждет действия каких-то других процессов?