复制通信器的Fortran MPI问题

我在使用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整数。

为什么会这样?

w169703048 回答:复制通信器的Fortran MPI问题

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3137631.html

大家都在问