Насколько мне известно, стандарт MPI не определяет никаких возвращаемых значений и параметров out для MPI_Send (): он не предоставляет никакой информации о событии отправки сообщения, возможно, потому что буферизация сообщения может сделать так, что нет информация о результате доступна на момент возврата вызова.
Если вы хотите, чтобы один процесс видел, когда завершается другой, вы должны отправить сообщение из завершающего процесса с указанным тегом, и постидокально опубликовать неблокирующее получает в другом процессе, чтобы увидеть, было ли уведомление о выходе отправлено.
Или, если вы хотите, чтобы вся программа прерывалась при остановке одного процесса, проще всего просто вызвать MPI_Abort () в завершающем процессе с MPI_COMM_WORLD в качестве коммуникатора, который гарантированно завершит работу всех процессов.
Редактировать: На самом деле ответить на вопрос в заголовке: «Что происходит, когда я MPI_Send завершить процесс?»: Насколько я понимаю, это зависит от того, используется ли буферизация или нет. Если буферизация не используется, то программа зависнет. Если используется буферизация, то MPI_Send () будет буферизировать сообщение, и процесс продолжит выполняться, но, поскольку не будет отправлено ни одного соответствующего приема, сообщение никогда не покинет буфер. Многое в конечном итоге приведет к тому, что программе не хватит памяти.