Почему MPI_barrier не синхронизируется правильно?
Вывод нижеприведенного кода
Program test
Use mpi
Implicit None
Integer :: rank,num_process,ierr
Real (8) :: a
Call MPI_Init (ierr)
Call MPI_Comm_rank (MPI_comm_world, rank, ierr)
Call MPI_Comm_size (MPI_comm_world, num_process, ierr)
Call random_number (a)
Print *, 'rank = ', rank, 'a = ', a
Call mpi_barrier (MPI_comm_world, ierr)
Call random_seed ()
Call random_number (a)
Print *, 'rank = ', rank, 'a = ', a
Call MPI_Finalize (ierr)
End
это что-то вроде
rank = 1 a = 3.920868194323862E-007
rank = 2 a = 3.920868194323862E-007
rank = 3 a = 3.920868194323862E-007
rank = 3 a = 0.937863842453073
rank = 0 a = 3.920868194323862E-007
rank = 2 a = 3.357612614239127E-002
rank = 0 a = 0.928975653817377
rank = 1 a = 0.481275889979884
Почему результат печати не синхронизируется на MPI_barrier
?
Правильный синхронизированный результат должен быть примерно таким
rank = 1 a = 3.920868194323862E-007
rank = 2 a = 3.920868194323862E-007
rank = 3 a = 3.920868194323862E-007
rank = 0 a = 3.920868194323862E-007
rank = 3 a = 0.937863842453073
rank = 2 a = 3.357612614239127E-002
rank = 0 a = 0.928975653817377
rank = 1 a = 0.481275889979884