Сложность с MPI_Bcast: как обеспечить вещание «правильного» root - PullRequest
3 голосов
/ 11 марта 2012

Я относительно новичок в MPI (с C), и у меня возникли некоторые проблемы с использованием MPI_Bcast для отправки int всем процессам.

В своем коде я решаю, какой ранг является корневым в цикле for,где разные процессы отвечают за разные элементы цикла.Затем я хочу передать Bcast результат от root для всех процессов, за исключением того, что все некорневые процессы не знают, от кого ожидать bcast, поэтому не принимаем его.

Блок кода выглядит примерно так:

for (iX=start; iX<end; iX++)
//start and end are the starting row and ending row for each processes, defined earlier

  for (int iY=1; iY<nn; iY++)

    // do some calculations

    if (some condition)

      int bcastroot = rank;  // initialized above
      int X = 111;   // initialized above

    else
      //do other calculations

  end
end

MPI_Bcast(&X, 1, MPI_INT, bcastroot, comm);

// remainder of code and MPI_FINALIZE

Когда я выполняю этот код, независимо от значения bcastroot по умолчанию (значение для всех процессов без полномочий root) конкурирует с root, поэтому X не транслируется правильно.Я не знаю значения X и не могу заранее предсказать корень, поэтому не могу определить его заранее.

Я попытался инициализировать bcastroot = -1, затем установить его для ранга, но это не работает,Есть ли способ, которым я могу Bcast это значение без установки root для всех процессов?

Спасибо, JonZor

1 Ответ

6 голосов
/ 11 марта 2012

Нет способа сделать MPI_Bcast, когда получатели не знают, что такое корень.Если вы знаете, что будет только один корень, вы можете сначала сделать MPI_Allreduce, чтобы договориться о нем:

int root, maybe_root;
int i_am_root = ...;
maybe_root = (i_am_root ? rank : 0);
MPI_Allreduce(&maybe_root, &root, 1, MPI_INT, MPI_MAX, MPI_COMM_WORLD);

, тогда каждый ранг будет знать тот же корень, и вы сможете делать трансляцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...