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/