отправка нескольких mpi без блокировки отправки-сохранит ли он отправленный заказ
скажем, у меня есть 3 неблокирующих отправки, как это
- MPI_Isend ();
- MPI_Isend ();
- MPI_Isend ();
и 3 соответствующих получает
- MPI_Recv ();
- MPI_Recv ();
- MPI_Recv ();
теперь предположим, что 2nd Isend не отправляет, так как его не блокирует 3rd будет отправлен. Теперь функции MPI_Recv получат предназначенные ?
Я имею в виду 1-й MPI_ISend отправить данные на 1-й и 2-й MPI_ISent на 2-й MPI_Recv и так далее.
1 ответов
Обновлено: Иеремия Уиллкок ниже в комментариях, я думаю, правильно, и этот ответ был неправильным.
Если три ISends вызываются последовательно, и получает все совпадают с ними, то не имеет значения, является ли одна операция отправки больше, или быстрее, или что-то еще; гарантия отсутствия обгона MPI говорит вам, что сообщения прибудут (и, таким образом, будут доступны для Recv) в порядке, в котором были сделаны Isends.
Если вызов чтобы ISend был отложен, как я изначально интерпретировал вопрос, или если вызов не удался, как было предложено (но обратите внимание, что у вас будут другие проблемы позже, если вызов не удался), то исходный ответ выполняется: если результат соответствует любой все Isends, и вызов чтобы второй ISend как-то задержался, тогда 1-й MPI_Recv() получит первый Isend, второй Recv получит третий Isend, а третий будет висеть до этого второго Isend происходит.
Если вы хотите убедиться, что первый MPI_Recv получает определенное сообщение, вы должны использовать теги, чтобы различать различные сообщения, и получить указать этот тег.