复制通信器的Fortran MPI问题

时间:2019-11-08 13:23:36

标签: fortran mpi openmpi

我在使用MPI-Fortran代码时遇到以下问题。 MPI通信器在Fortran中表示为INTEGER。但是,如果考虑以下最小示例,则在使用通信器的副本时,我不会从MPI环境中获取任何信息。

PROGRAM TEST1
INCLUDE 'mpif.h'
INTEGER :: mpicomm, mpiinfo, mpi_size, mpi_rank, info

CALL MPI_INIT(info)
mpicomm = MPI_COMM_WORLD
WRITE(*,*) "MPI_COMM_WORLD = ", MPI_COMM_WORLD, " mpicomm = ", mpicomm
CALL MPI_COMM_SIZE(mpicomm , mpi_size)
CALL MPI_COMM_RANK(mpicomm , mpi_rank)
WRITE(*,*) mpi_rank, mpi_size

CALL MPI_FINALIZE()
END PROGRAM TEST1

我使用了OpenMPI 3.0 / 4.0和gfortran 7.3 / 9.1的服务器组合。在所有情况下,我都会得到:

 $ mpirun -np 6 ./a.out 
 MPI_COMM_WORLD =            0  mpicomm =            0
 MPI_COMM_WORLD =            0  mpicomm =            0
 MPI_COMM_WORLD =            0  mpicomm =            0
 MPI_COMM_WORLD =            0  mpicomm =            0
 MPI_COMM_WORLD =            0  mpicomm =            0
 MPI_COMM_WORLD =            0  mpicomm =            0
           0           0
           0           0
           0           0
           0           0
           0           0
           0           0

但是,当我将MPI_COMM_WORLD硬编码到子例程调用中时,它可以工作。但是查看mpif.h可以发现MPI_COMM_WORLD也是标准的Fortran整数。

为什么会这样?

0 个答案:

没有答案