The MPI_Barrier call in the parent must be on the intercomm returned by the spawn. The call in the children must be on MPI_COMM_PARENT.
The semantic of an MPI_Barrier call on an intercomm is:
No MPI_Barrier caller in the local group returns until all members of the remote group have made the call. Note that this is symetrical. In the parent, the barrier blocks until all children tasks have called and in the child, all callers block until the parent tasks have all called. A task in the parent can return before all members of the parent group have called as long as all members of the child group have. Same for children - the barrier is with respect to the remote group ONLY.
Dick Treumann - MPI Team
IBM Systems & Technology Group
Dept X2ZA / MS P963 -- 2455 South Road -- Poughkeepsie, NY 12601
Tele (845) 433-7846 Fax (845) 433-8363
firstname.lastname@example.org wrote on 03/19/2010 09:44:06 PM:
> By the way, related to the comment about the processes being
> connected, a test of MPI_BARRIER across the child and parent was
> unsuccessful: the child and parent did not wait for each other with
> the following commands:
> CALL MPI_BARRIER(MPI_COMM_WORLD,ierr) ! in parent
> CALL MPI_BARRIER(MPI_COMM_WORLD,ierr) ! in child