Параллельный прием / отправка от / одному отправителю / получателю - PullRequest
2 голосов
/ 07 сентября 2011

Интересно, возможно ли одновременное получение сообщения от одного отправителя, и наоборот, до одновременной отправки одному получателю.И если да, как он будет себя вести?

Чтобы сделать вопрос более понятным, представьте, что у нас есть 4 потока, каждый из которых прослушивает сообщение из одного и того же источника

MPI_Recv(buf, count, type, THE_SAME_SOURCE, tag, status)

Все эти темынаходятся в одном и том же процессе MPI, поэтому все они имеют одинаковый ранг MPI.И из другого процесса MPI или того же, но из другого потока, кто-то называется MPI_Send.Каждый из получателей получает одно и то же сообщение, или только одно из них, или выдается какое-то исключение (произошла ошибка)?

И наоборот, что если 4 потока (в одном и том же процессе MPI или нет)отправить сообщение одному получателю, который также может быть в том же процессе MPI или нет.Получает ли он все сообщения?

У меня нет большого опыта работы с MPI, и ответ на поставленный выше вопрос может мне сильно помочь.

Спасибо

1 Ответ

3 голосов
/ 07 сентября 2011

Получения обрабатываются в порядке их регистрации.Никогда не бывает ситуации «одновременно», поскольку они синхронизируются.

Описание семантики двухточечной связи

Итак, в вашем первом случае, это означает, что одна отправка, которая происходит, когда четыре потока ожидают получения, будет отправлена ​​первому потоку, который зарегистрировался для получения, а другие будут продолжать ждать последующих сообщений.опять нет "заодно".Первый поток, который отправит сообщение, будет тем, который получен получающим потоком.Другие отправители не будут иметь зарегистрированных получателей.

...