Ваша программа блокируется в world.send(0, 0, outmessage)
.
Для достаточно маленьких строк ваша библиотека MPI делает неблокирующим вызов, и программа запускается.При превышении любого порога, который ваша библиотека MPI использует для размера сообщения, она переключается на блокирующий вызов.Поскольку никто не получает сообщение, отправка не может быть продолжена, и программа зависает.Обратите внимание, что описанное поведение не требуется стандартом: нельзя полагаться на библиотеку MPI, используя неблокирующую функцию для небольших размеров.
Из стандарта MPI 3.1, раздел 3.2.4:
Источник = пункт назначения разрешен, то есть процесс может отправить сообщение самому себе.(Тем не менее, это небезопасно делать с блокирующими операциями отправки и получения, описанными выше, поскольку это может привести к тупику.
Смежный вопрос: Поведение связи MPIранг с самим собой четко определен?
Решение не состоит в том, чтобы отправлять что-либо из процесса 0 себе.
Максимальный размер, который может быть отправлен, - INT_MAX
, чтоопределяется максимальным количеством, которое вы можете дать MPI_Send. Подробнее см. в этом вопросе .