Я хочу использовать MPI (MPICH2) для окон. Я пишу эту команду:MPI Barrier C++
MPI_Barrier(MPI_COMM_WORLD);
И я ожидаю, что он блокирует все Процессоры, пока все члены группы не назвали это. Но этого не происходит. Добавить схему моего кода:
int a;
if(myrank == RootProc)
a = 4;
MPI_Barrier(MPI_COMM_WORLD);
cout << "My Rank = " << myrank << "\ta = " << a << endl;
(С 2 процессора процессор :) Root (0
) действует правильно, но процессор с 1-го ранга не знает переменную a
, поэтому отображение -858993460
вместо 4
.
Может ли кто-нибудь мне помочь?
С уважением
Спасибо. Это правда, но у меня есть другой вопрос. Поскольку я знаю, что барьер блокирует вызывающего абонента, пока все члены группы его не вызвали, но я протестировал и увидел, что этот процесс 1 передает эту функцию (путем написания предложения, cout), а процесс root (0) - перед барьером. В чем проблема? Спасибо – aryan
Вы не можете доверять порядку выходных операторов из разных процессов. Если вы не уверены, убедитесь, что ваши часы синхронизированы и выведены 'time()' до и после барьера. – eduffy
Не ожидайте, что часы на разных процессорах будут находиться в такой близкой синхронизации, что время, которое они сообщают, позволяет корректно упорядочивать выходные инструкции. MPI_Barrier синхронизирует процессы, а не часы. –