Предполагая, что код упрощённого FORTRAN, скомпилированный с mpif90 как:Вызов подпрограммы в FORTRAN без блокировки основной программы
program main
!
use mpi
implicit none
integer:: j, numtasks, taskid, ierr
integer:: master = 0
!
call mpi_init(ierr)
call mpi_comm_rank(mpi_comm_world, taskid, ierr)
!
if (taskid .eq. master) then
j = 5
call child (j)
! do stuff
end if
call mpi_finalize(ierr)
!
end program main
subroutine child(j)
!
implicit none
integer, intent(in):: j
! do some stuff with j
end subroutine child
По умолчанию мастера CPU из основных жду, пока ребенок не будет сделан с его расчетами , Тем не менее, я хочу, чтобы он продолжал выполнять свои задачи после вызова ребенка, в то время как ребенок также выполняет свои задачи. Я хотел бы, чтобы ребенок был подпрограммой для основного, поскольку мне нужно передать некоторые данные от основного к ребенку (но не наоборот). Мне было интересно узнать, возможно ли это в FORTRAN (возможно, используя какой-то неблокирующий вызов подпрограммы или многопоточность, например mpi_comm_spawn).