2010-02-25 3 views
4

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

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

ответ

11

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

5

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.

Смежные вопросы