Короче говоря, ваша программа неверна, и вам повезло, что она не зависала с небольшим счетом.
В соответствии со стандартом MPI, вы не можете предполагать, что MPI_Send()
вернется, если соответствующий MPI_Recv()
не имеетбыл опубликован.
С прагматической точки зрения "короткие" сообщения обычно отправляются в активном режиме, и MPI_Send()
, скорее всего, сразу возвращается.С другой стороны, «длинные» сообщения обычно включают протокол рандеву и, следовательно, зависают до тех пор, пока не будет отправлено соответствующее сообщение.
«маленький» и «длинный» зависят от нескольких факторов, включая соединение, которое выИспользуем.И снова, вы не можете предполагать, что MPI_Send()
всегда будет возвращаться немедленно, если вы отправляете сообщения, которые достаточно малы.