Почему 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

0 ответов

Другие вопросы по тегам