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 <re...@mail.rockefeller.edu> wrote:

>
> >         On Aug 12, 2018, at 2:18 PM, Diego Avesani
> >         <diego.aves...@gmail.com> 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
> users@lists.open-mpi.org
> https://lists.open-mpi.org/mailman/listinfo/users
>
_______________________________________________
users mailing list
users@lists.open-mpi.org
https://lists.open-mpi.org/mailman/listinfo/users

Reply via email to