You're right, I forgot a MPI_Finalize() in a #ifdef the line before... Thank you!
Le Friday 07 May 2010 15:26:28 Jeff Squyres, vous avez écrit : > 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.