отправка нескольких mpi неблокирующих отправок - сохранит ли отправленный заказ - PullRequest
6 голосов
/ 29 января 2012

скажем, у меня есть 3 неблокирующих отправки, как это

  1. MPI_Isend ();
  2. MPI_Isend ();
  3. MPI_Isend ();

и 3 соответствующих приема

  1. MPI_Recv ();
  2. MPI_Recv ();
  3. MPI_Recv ();

Теперь предположим, что 2-й Isend не отправляет, так как его неблокирующий 3-й будет отправлен.Теперь функции MPI_Recv получат нужные?

Я имею в виду, 1-й MPI_ISend отправит данные на 1-й прием, 2-й MPI_ISent на 2-й MPI_Recv и т. Д.

1 Ответ

0 голосов
/ 30 января 2012

Обновлено : Джеремия Уиллкок ниже в комментариях, я считаю правильным, и этот ответ был неправильным.

Если три IS-конца вызываются последовательно, и все получатели совпадают с ними, то не имеет значения, является ли операция отправки большей, быстрой или любой другой; Непревзойденная гарантия MPI говорит вам, что сообщения будут поступать (и, следовательно, будут доступны для Recv) в том порядке, в котором были сделаны Isends.

Если вызов для ISend был отложен, именно так я первоначально интерпретировал вопрос, или если вызов не удался, как было предложено (но учтите, что у вас возникнут другие проблемы позже, если вызов не удался) тогда первоначальный ответ верен: если Получатели соответствуют любому всем Isends, и вызов ко второму ISend каким-то образом задерживается, тогда первый MPI_Recv () получит первый Isend, второй Recv получит третий Isend, а третий будет зависать до тех пор, пока не произойдет второй Isend.

Если вы хотите убедиться, что первый MPI_Recv получает конкретное сообщение, вы должны использовать теги, чтобы различать различные сообщения, и чтобы приемное указало этот тег.

...