Реализация MPI: Может ли MPI_Recv получать сообщения от многих MPI_Send? - PullRequest
4 голосов
/ 25 февраля 2010

Теперь я пытаюсь использовать MPI_Send и MPI_Recv для передачи лучших найденных решений среди нескольких процессов. Предполагается, что лучшие решения, найденные в каждом процессе, передаются процессу управления, в котором хранятся все лучшие решения, и при необходимости отправляются другим процессам. У меня вопрос, как это реализовать? Например, как только процесс 1 найдет новое лучшее, он может вызвать MPI_Send и отправить его процессу управления. Есть ли способ для процесса контроля определить, есть ли сообщение для получения? Каждый MPI_Send требует MPI_Recv? С нетерпением ждем совета от ваших экспертов. Спасибо!

Спасибо за ваш совет. Я собираюсь позволить нескольким рабочим процессам отправлять сообщения одному процессу управления. Рабочие процессы решают, когда отправлять. Процесс контроля должен определять, когда получать. Может ли MPI_Proble сделать это?

Ответы [ 3 ]

11 голосов
/ 25 февраля 2010

Да, MPI_RECV может указать MPI_ANY_SOURCE в качестве ранга источника сообщения, чтобы вы могли делать то, что хотите.

5 голосов
/ 26 февраля 2010

MPI_Recv может использовать MPI_ANY_SOURCE как способ получения сообщения любого другого ранга.

В зависимости от рабочей нагрузки и характера процесса управления вы можете захотеть сохранить контроль в своем коде и время от времени входить в библиотеку MPI. В этом случае MPI_IRecv для MPI_ANY_SOURCE и MPI_Test может быть хорошим способом для продолжения.

Если есть какая-то обработка, которую вам нужно выполнить на основе содержимого сообщения, MPI_Probe или MPI_IProbe позволяют проверить заголовок сообщения ДО того, как сообщение фактически MPI_Recv'd. Например, MPI_Probe позволяет определить размер сообщения и создать буфер соответствующего размера.

Кроме того, если все рабочие ранги будут иногда достигать «барьерной» точки, когда должны быть проверены лучшие решения, коллективная операция MPI_Gather / MPI_Bcast также может быть подходящей.

Имейте в виду, что ранги, которые вступают в длительные вычислительные фазы, иногда мешают хорошему распространению сообщений. Если существует расширенная вычислительная фаза, может быть полезно убедиться, что все сообщения MPI были доставлены до этой фазы. Это становится более важным, если в кластере используется соединение в стиле RDMA. MPI_Barrier гарантирует, что все ранги войдут в MPI_Barrier до того, как какие-либо ранги MPI смогут вернуться из вызова MPI_Barrier.

3 голосов
/ 25 февраля 2010

Посмотрите на MPI_Probe .

...