Ich versuche, mithilfe von MPI_Comm_spawn MPI_Send() und MPI_Recv() zu kommunizieren zwischen einem Kind und seinen Eltern-Prozess, erstellt zu verwenden, wie unten zu sehen sein:Verwenden MPI_Send und MPI_Recv zwischen Eltern und Kind-Prozess mit MPI_Comm_spawn erstellt
Parent.f90
program master
use mpi
implicit none
integer :: ierr, num_procs, my_id, intercomm, i, array(10), tag
CALL MPI_INIT(ierr)
CALL MPI_COMM_RANK(MPI_COMM_WORLD, my_id, ierr)
CALL MPI_COMM_SIZE(MPI_COMM_WORLD, num_procs, ierr)
if (.not. (ierr .eq. 0)) then
print*, "S.Unable to initilaize!"
stop
endif
if (my_id .eq. 0) then
call MPI_Comm_spawn("./child.out", MPI_ARGV_NULL, 1, MPI_INFO_NULL, my_id, &
& MPI_COMM_WORLD, intercomm, MPI_ERRCODES_IGNORE, ierr)
call MPI_Send(array, 255, MPI_INTEGER, my_id, tag, intercomm, ierr)
endif
call MPI_Finalize(ierr)
end program master
Child.f90
program name
use mpi
implicit none
! type declaration statements
integer :: ierr, parent, my_id, n_procs, i, array(10), tag, intercomm
logical :: flag, high
! executable statements
call MPI_Init(ierr)
call MPI_Initialized(flag, ierr)
call MPI_Comm_get_parent(parent, ierr)
call MPI_Comm_rank(MPI_COMM_WORLD, my_id, ierr)
call MPI_Comm_size(MPI_COMM_WORLD, n_procs, ierr)
print *, "Initilaized? ", flag
print *, "My mommy is: ", parent
print *, "My rank is:", my_id
tag = 1
call MPI_Recv(array, 255, MPI_INTEGER, MPI_ANY_SOURCE, tag, parent, MPI_STATUS_IGNORE, ierr)
print *, "Client received array."
call MPI_Finalize(ierr)
end program name
Wenn das obige Programm ausgeführt wird, scheinen die Eltern durch feine zu laufen, aber das Kind nie prin ts: "Der Client hat das Array empfangen.", was mich zu der Annahme verleitet hat, dass ich etwas mit dem send/recv vermasselt habe.
Wenn es nicht klar ist, was ich zu erreichen versuchen, mag ich die Eltern, ein Kind zu erzeugen, um das Kind ein Array senden, das Kind das Array und das Kind zu verarbeiten, um das Array zurück an die Mutter senden. (Kursiv wird noch geschrieben werden, ich möchte arbeiten diese grundlegende Kommunikation erhalten zuerst)
Im Moment, als ich laufen: mpiexec -np 1 parent.out
, die Kind druckt:
Initilaized? T
My mommy is: 3
My rank is: 0
aber nicht „Client empfangen Array. "