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