Я столкнулся с ситуацией, когда только некоторые процессы обходят функцию MPI_Barrier
.
Проблема появляется в этом фрагменте кода:
printf("[%d] Before barrier\n", mpi_rank);
fflush(stdout);
MPI_Barrier(MPI_COMM_WORLD);
printf("[%d] After barrier\n", mpi_rank);
fflush(stdout);
sleep(1);
После запуска с 4 процессами у меня есть следующий вывод:
[3] Before barrier
[2] Before barrier
[0] Before barrier
[1] Before barrier
[1] After barrier
И приложение зависает.
Я ожидал, что все процессы смогут напечатать сообщение [id] After barrier
, но только процесс 1
напечатал его.
Почему не все процессы проходят барьер?
Я ожидал вывода вроде:
[3] Before barrier
[2] Before barrier
[0] Before barrier
[1] Before barrier
[1] After barrier
[0] After barrier
[2] After barrier
[3] After barrier
Я использую openmpi с Centos внутри докера. Приложение запускает несколько потоков, но показанный фрагмент не входит ни в один из них.