Fortran MPI проблема с копированием коммуникатора - PullRequest
0 голосов
/ 08 ноября 2019

У меня следующая проблема с кодом 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 также является только стандартным целым числом Фортрана.

Почему это происходит?

...