On Apr 30, 2010, at 5:59 AM, N.M. Maclaren wrote:

> MPI quite rightly does not specify this, because the matter is very system-
> dependent, and it is not possible to return the exit code (or display it)
> in all environments.  Sorry, but that is reality.

Correct -- MPI intentionally does not say what happens after MPI_FINALIZE.  MPI 
intentionally doesn't even specify much about how to start an MPI job (just 
like Fortran, actually).

> The last paragraph of the specification of MPI_Finalize makes it clear
> that it is the USER'S responsibility to return an exit code to the system
> for process 0, and that what happens for other ones is undefined.  Or
> fairly clear - it could be stated in so many words, rather than being
> implicit in the requirement on implementors.

I don't think that's quite feasible, because the user doesn't directly control 
what mpirun returns.  So (many) implementations *have* to choose something from 
their job start agent (mpirun or mpiexec or whatever).

I think OMPI's behavior of returning 0 from mpirun if and only if all processes 
call MPI_FINALIZE successfully *and* return 0 is good.  Return arbitrary 
nonzero if some process aborts (calling MPI_ABORT, not calling MPI_INIT, not 
calling MPI_FINALIZE, or otherwise).  Return any of the individual MPI 
processes' non-zero exit status if all call MPI_FINALIZE but some (or all) 
don't return an exit status of 0 (I don't have a strong opinion about which one 
to return -- e.g., the *first* one to return a non-zero exit value, the 
*highest* or *lowest* non-zero exit status, ...etc.).

-- 
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