Dear George, Dear Gilles, Dear Jeff, Deal all,
Thank for all the suggestions.
The problem is that I do not want to FINALIZE, but only to exit from a
cycle.
This is my code:
I have:
master_group;
each master sends to its slaves only some values;
the slaves perform something;
according to a counter, every processor has to leave a cycle.
Here an example, if you want I can give you more details.
DO iRun=1,nRun
!
IF(MPI_COMM_NULL .NE. MPI_MASTER_COMM)THEN
VARS(1) = REAL(iRun+1)
VARS(2) = REAL(iRun+100)
VARS(3) = REAL(iRun+200)
VARS(4) = REAL(iRun+300)
ENDIF
!
CALL MPI_BCAST(VARS,4,MPI_DOUBLE_PRECISION,0,MPI_LOCAL_COMM,iErr)
!
test = SUM(VARS)
!
CALL MPI_ALLREDUCE(test, test, 1, MPI_DOUBLE_PRECISION, MPI_SUM,
MPI_LOCAL_COMM,iErr)
!
!
counter = test
!
CALL MPI_ALLREDUCE(counter, counter, 1, MPI_DOUBLE_PRECISION, MPI_SUM,
MPI_MASTER_COMM,iErr)
!
IF(counter.GT.10000)THEN
EXIT
ENDIF
ENDDO
My original code stucks on the cycle and I do not know why.
Thanks
Diego
On 13 August 2018 at 23:44, George Reeke <[email protected]> wrote:
>
> > On Aug 12, 2018, at 2:18 PM, Diego Avesani
> > <[email protected]> wrote:
> > >
> > > For example, I have to exit to a cycle, according to a
> > check:
> > >
> > > IF(counter.GE.npercstop*nParticles)THEN
> > > flag2exit=1
> > > WRITE(*,*) '-Warning PSO has been exit'
> > > EXIT pso_cycle
> > > ENDIF
> > >
> > > But this is difficult to do since I have to exit only after
> > all the threats inside a set have finish their task.
> > >
> > > Do you have some suggestions?
> > > Do you need other information?
> >
> Dear Diego et al,
> Assuming I understand your problem:
> The way I do this is set up one process that is responsible for normal
> and error exits. It sits looking for messages from all the other ranks
> that are doing work. Certain messages are defined to indicate an error
> exit with an error number or some text. The exit process is spawned by
> the master process at startup and is told how many working processes are
> there. Each process either sends an OK exit when it is done or an error
> message. The exit process counts these exit messages and when the count
> equals the number of working processes, it prints any/all errors, then
> sends messages back to all the working processes, which, at this time,
> should be waiting for these and they can terminate with MPI_Finalize.
> Of course it is more complicated than that to handle special cases
> like termination before everything has really started or when the
> protocol is not followed, debug messages that do not initiate
> termination, etc. but maybe this will give you an idea for one
> way to deal with this issue.
> George Reeke
>
>
>
>
> _______________________________________________
> users mailing list
> [email protected]
> https://lists.open-mpi.org/mailman/listinfo/users
>
_______________________________________________
users mailing list
[email protected]
https://lists.open-mpi.org/mailman/listinfo/users