Как отправить сообщение без определенного места назначения в MPI? - PullRequest
6 голосов
/ 15 марта 2012

Я хочу отправить сообщение одному из рядов, получающих сообщение с определенным тегом. Если есть какой-либо ранг, сообщение получено, и сообщение используется. В MPI_Recv () мы можем получить сообщение, используя MPI_ANY_SOURCE / MPI_ANY_TAG, но MPI_Send () не может этого сделать. Как я могу отправить сообщение с неизвестным адресатом? MPI_Bcast () не может этого сделать, потому что после получения я должен ответить на исходный процесс. Спасибо.

Ответы [ 3 ]

5 голосов
/ 15 марта 2012

Я бы сделал так, чтобы рабочие процессы сигнализировали мастеру, что они готовы к приему. Мастер будет отслеживать, какие ранги готовы, выбрать один (сначала младший ранг, случайный, круговой, как вам нравится), отправить его и сбросить его флаг готовности.

1 голос
/ 17 марта 2012

Краткий ответ: вы не можете сделать это в MPI.

Немного более длинный ответ: вы, вероятно, не хотите этого делать. Я предполагаю, что вы пытаетесь настроить какую-то кражу работы. Как предположил suszterpatt, вы могли бы использовать одностороннюю связь, чтобы «захватить» работу из процесса отправки, но вам нужно будет использовать блокировки, и это не будет хорошо масштабироваться для многих процессов, если нет некоторой идеи о локальной группе процессов т. е. вы не можете иметь 1000 процессов, которые все крадут из одного процесса, вам нужно будет разложить вещи).

1 голос
/ 15 марта 2012

Вы просто хотите отправить сообщение случайному рангу?

...