управляемый событиями MPI - PullRequest
5 голосов
/ 05 октября 2011

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

Из того, что я 'Читая о MPI, кажется, что процессы отправки и получения должны быть согласованы относительно того, когда они отправляют и получают.Например, предположим, что один процесс отправляет сообщение, но другой процесс не знает, что ему нужно получить, или наоборот, все блокируется.Есть ли способ сделать каждый процесс немного более независимым?

Ответы [ 2 ]

1 голос
/ 20 сентября 2013

Возможно, вы захотите использовать charm ++ ;это явно не управляемая событиями среда, но она обеспечивает механизм абстракции для выполнения задач и их динамического распределения.

1 голос
/ 07 октября 2011

Вы можете сделать это следующим образом:

Объявите один главный узел (0), который будет распределять задачи. В этом узле псевдокод:

int sendTo
for task in tasks:
  MPI_Recv(...sendTo, MPI_INT, MPI_ANY_SOURCE,...)
  MPI_Send(job,... receiver: sendTo)

for node in nodes:
  MPI_Recv(...sendTo, MPI_INT, MPI_ANY_SOURCE,...)
  MPI_SEND(job_null,...,receiver: sendTo)

В подчиненных узлах код будет:

while (true)
  MPI_Send(myNodenum to 0, MPI_INT)
  MPI_Recv(job from 0)
  if (job == job_null)
    break
  else
    execute job

Я думаю, это должно сработать.

...