[Mpi3-ft] Using MPI_Comm_shrink and MPI_Comm_agreement in the same application

David Solt dsolt at us.ibm.com
Mon Apr 9 16:01:57 CDT 2012


Thanks for the feedback from everyone.    It is interesting to read over 
the various approaches.  I was attempting to see if I could distill any 
general rules from the examples.   I like the guideline of "Don't use 
MPI_Comm_agreement in the non-error case", though even George's example 
will call MPI_Comm_agreement when there are no errors.   It is clearly 
possible to use MPI_Comm_agreement in non-failures cases, but it still 
seems like a good guideline.    An obvious rule is "Don't write code where 
one rank can possibly call MPI_Comm_shrink while another calls 
MPI_Comm_agreement".    I'm still wrestling with whether 
MPI_Comm_agreement is necessary to write nontrivial FT code or if it is 
simply a convenience that makes writing FT code simpler.   It seems to me 
that you can write some simple infinite code loops that error check MPI 
calls but do not use MPI_Comm_agreement, but before a rank makes any 
significant transition within the code (for example, calling MPI_Finalize 
or leaving a library), a call to MPI_Comm_agreement seems necessary.   I'm 
assuming in all these cases that the application calls collectives. 
Anyhow, thanks again for the code/comments.     As to Josh's question of 
can you ever call shrink or agreement in a callback, I believe that would 
be very difficult to do safely, especially if the application is known to 
make direct calls to either of those routines.

Thanks,
Dave



From:   George Bosilca <bosilca at eecs.utk.edu>
To:     "MPI 3.0 Fault Tolerance and Dynamic Process Control working 
Group" <mpi3-ft at lists.mpi-forum.org>
Date:   04/09/2012 11:41 AM
Subject:        Re: [Mpi3-ft] Using MPI_Comm_shrink and MPI_Comm_agreement 
in the  same application
Sent by:        mpi3-ft-bounces at lists.mpi-forum.org



Dave,

The MPI_Comm_agree is meant to be used in case of failure. It has a 
significant cost, large enough not to force it on users in __any__ case.

Below you will find the FT version of your example. We started from the 
non fault tolerant version, and added what was required to make it fault 
tolerant.

  george.



    success = false;
    do {
        MPI_Comm_size(comm, &size); 
        MPI_Comm_rank(comm, &rank);
        root = (0 == rank);
        do {
            if (root) read_some_data_from_a_file(buffer); 

            rc = MPI_Bcast(buffer, .... ,root, comm);
            if( MPI_SUCCESS != rc ) {  /* check only for FT type of errors 
*/
                MPI_Comm_revoke(comm);
                break;
            }

            done = do_computation(buffer, size); 

            rc = MPI_Allreduce( &done, &success, ... MPI_OP_AND, comm );
            if( MPI_SUCCESS != rc ) {  /* check only for FT type of errors 
*/
                success = false;  /* not defined if MPI_Allreduce failed 
*/
                MPI_Comm_revoke(comm);
                break;
            }
        } while(false == success);
        MPI_Comm_agree( comm, &success );
        if( false == success ) {
            MPI_Comm_revoke(comm);
            MPI_Comm_shrink(comm, &newcomm);
            MPI_Comm_free(comm);
            comm = newcomm;
        }
    } while (false == success);




_______________________________________________
mpi3-ft mailing list
mpi3-ft at lists.mpi-forum.org
http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-ft


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mpi-forum.org/pipermail/mpiwg-ft/attachments/20120409/688af04c/attachment-0001.html>


More information about the mpiwg-ft mailing list