首页 > 解决方案 > 使用 mpi subrouine 更改变量的值

问题描述

我有 mpi + fortran 的问题。即,我的程序中的一个变量在使用 mpi 子例程 MPI_RECV 后发生了更改,尽管该变量不应更改。这是我的代码片段,问题出在:

IF ( RANK .EQ. 1 ) THEN
    CALL MPI_SEND (     &
        YDOT ( 1 ),     &
        1,              &
        MPI_DP_VEC,     &
        0,              &
        1,              &
        MPI_COMM_WORLD, &
        IERROR          &
                  )
END IF
IF ( RANK .EQ. 0 ) THEN
    PRINT *, rho, 'aaa1'
    CALL MPI_RECV (     &
        YDOT ( 1 ),     &
        1,              &
        MPI_DP_VEC,     &
        1,              &
        1,              &
        MPI_COMM_WORLD, &
        STATUS,         &
        IERROR          &
                  )
    PRINT *, rho, 'aaa2'
END IF

这产生

35368.254799414455      aaa1
2.1219957914593380E-314 aaa2

如果重要,我使用派生数据类型 MPI_DP_VEC。所以,我的问题,为什么会这样?为什么使用子程序 MPI_RECV 会导致变量“rho”发生变化?

预先感谢您的任何帮助!

标签: fortranmpi

解决方案


推荐阅读