The error message is telling you that you have invoked MPI_Finalize more than 
once n a single process.  The issue is that you can't do that -- you should 
only invoke MPI_Finalize exactly once in a given process.  It's not an issue of 
ongoing communications when you invoke MPI_Finalize.

It's ok for different MPI processes to invoke MPI_Finalize at different times; 
Open MPI should figure that out without problem.

FWIW, you should also be able to invoke the MPI_Finalized function to see if 
MPI_Finalize has already been invoked.


On May 7, 2010, at 12:54 AM, Yves Caniou wrote:

> Dear All,
> 
> My parallel application ends when each process receives a msg, done in an
> async way (but my question still arise if sync comm were used, see the ref to 
> the manpage). Senders call MPI_Finalize() after a call to MPI_Wait() and
> receivers call MPI_Finalize() after having received the message.
> 
> An execution gives me that all proc finish as planned but I obtain the
> following errors (times the number of processor used)
> --------------------------------
>         With openMPI 1.4.2 compiled with gcc-4.5 on a Quad-Core AMD 
> Opteron(tm)
> Processor 8356
> *** The MPI_Finalize() function was called after MPI_FINALIZE was invoked.
> *** This is disallowed by the MPI standard.
> *** Your MPI job will now abort.
> Abort after MPI_FINALIZE completed successfully; not able to guarantee that
> all other processes were killed!
> 
>         With openMPI 1.4.1 (debian package), Intel(R) Core(TM)2 Duo CPU     
> P9600
> *** An error occurred in MPI_Finalize
> *** after MPI was finalized
> *** MPI_ERRORS_ARE_FATAL (your MPI job will now abort)
> Abort after MPI_FINALIZE completed successfully; not able to guarantee that
> all other processes were killed!
> ---------------------------------
> 
> I think it comes from the fact that, as mentionned in the man of
> MPI_Finalize():
>         For  example,  a successful return from a blocking communication 
> opera-
>        tion or from MPI_Wait or MPI_Test means that the communication is  com-
>        pleted by the user and the buffer can be reused, but does not guarantee
>        that the local process has no more work to do.
> 
> Nonetheless, if MPI_Finaliaze() is called before that the exchange of messages
> really takes place, receivers wouldn't call their MPI_Finalize(), but would
> just be issuing an abort thing, no?
> 
> Well, I'm perplex. When do I know when my proc can make the call to
> MPI_Finalize() and obtain an execution without error messages?
> 
> Thank you for any help.
> 
> .Yves.
> 
> --
> Yves Caniou
> Associate Professor at Université Lyon 1,
> Member of the team project INRIA GRAAL in the LIP ENS-Lyon,
> Délégation CNRS in Japan French Laboratory of Informatics (JFLI),
>   * in Information Technology Center, The University of Tokyo,
>     2-11-16 Yayoi, Bunkyo-ku, Tokyo 113-8658, Japan
>     tel: +81-3-5841-0540
>   * in National Institute of Informatics
>     2-1-2 Hitotsubashi, Chiyoda-ku, Tokyo 101-8430, Japan
>     tel: +81-3-4212-2412
> http://graal.ens-lyon.fr/~ycaniou/
> 
> _______________________________________________
> users mailing list
> us...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/users
> 


-- 
Jeff Squyres
jsquy...@cisco.com
For corporate legal information go to:
http://www.cisco.com/web/about/doing_business/legal/cri/


Reply via email to