The output of below fortran code
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
is something like
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
Why the print result is not synchronized at the MPI_barrier
?
The correct synchronized result should be something like this
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