Я читал, что рекомендуется использовать модуль MPI, а не включать файл mpif.h. Тем не менее, я получаю следующее сообщение об ошибкеКаков правильный способ работы с MPI-коммуникаторами в Fortran?
Error: There is no specific subroutine for the generic ‘mpi_comm_split’
когда я запускаю эту программу
program hello_world
use mpi_f08
implicit none
! include 'mpif.h'
integer :: ierr, num_procs, my_id,newcomm
integer :: color,key
call MPI_INIT (ierr)
color =1; key=0
call MPI_COMM_RANK (MPI_COMM_WORLD, my_id, ierr)
call MPI_COMM_SIZE (MPI_COMM_WORLD, num_procs, ierr)
call MPI_Comm_split(MPI_COMM_WORLD, color,key,newcomm, ierr)
call MPI_FINALIZE (ierr)
end
ошибка исчезает, если я включаю «mpif.h» вместо того, чтобы использовать модуль MPI. Почему это?
Никогда не пробовал, но похоже, что тип, используемый для интерфейса f08, использует 'type (MPI_comm)' for 'newcomm' ... – Gilles
В связи с тем, что Жиль сказал, что произойдет, если вы просто« используете mpi »? Какой компилятор и версия, а также то, что mpi и версия могут быть полезны. –
* Ошибка исчезнет, если я включил 'mpif.h' вместо использования модуля MPI. Почему это? * Потому что, используя модуль mpi, вы позволяете компилятору проверять соответствие стандартных формальных и фактических аргументов во время компиляции. Подход 'include' позволяет использовать всевозможные глупости во время выполнения. –