Реализация MPI: может ли MPI_Recv получать сообщения от многих MPI_Send?

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

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


person Jackie    schedule 25.02.2010    source источник


Ответы (3)


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

person High Performance Mark    schedule 25.02.2010

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

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

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

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

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

person Stan Graves    schedule 25.02.2010

Взгляните на MPI_Probe.

person Phil Miller    schedule 25.02.2010