On Mar 21, 2012, at 15:13 , Josh Hursey wrote: > I see your point about setting MPI_ERR_PENDING on the internal status > versus the status returned by MPI_Waitall. As I mentioned, the reason > I choose to do that is to support the ompi_errhandler_request_invoke() > function. I could not think of an better way to fix this, so I'm open > to ideas.
If MPI_ERR_PENDING is not set on the request status then I don't see any issues with the ompi_errhandler_request_invoke. Do I miss something obvious? > > MPI_Waitall returns MPI_ERR_PENDING for 'not completed' requests (or > sets the exposed status.MPI_ERROR field appropriately, depending on > the completion function used). The user must still call a completion > function to complete the request at which point the true error value > is reported (MPI_SUCCESS, or something else). So I think we are on the > same page here. > > Setting the request->req_status.MPI_ERROR to MPI_ERR_PENDING in > MPI_Waitall does not prevent the OMPI system from overwriting that > value with the correct error (e.g., MPI_ERR_TRUNCATE). When the OMPI > system wants to set an error on the request it sets the value (without > checking the previous value in req_status.MPI_ERROR) before calling > the completion operation. We reset the value from MPI_ERR_PENDING to > MPI_SUCCESS at the start of the test/wait operations so that the rest > of the checks for (MPI_SUCCESS != req->req_status.MPI_ERROR) complete > appropriately in those functions. > > So I am still failing to see why the patch is incorrect. Is it > 'incorrect' or just 'not implemented the way you think it should be'? > If the latter, then I'd love to see a patch. If the former, then I > would really like to understand why. I didn't say it is incorrect, just that it is an overkill that is (1) not required by the MPI standard; (2) potentially not thread safe; (3) sub-optimal in terms of memory writes; (4) way to complex for what MPI_ERR_PENDING is supposed to achieve. Moreover, I guess your patch is indeed correct if the MPICH test you were using pass. > Do we both agree that before this patch Open MPI did not support > MPI_ERR_PENDING? Who dares claim the opposite? george. > > -- Josh > > > On Wed, Mar 21, 2012 at 2:45 PM, George Bosilca <bosi...@eecs.utk.edu> wrote: >> My point was that MPI_ERR_PENDING should never be set on a specific request. >> MPI_ERR_PENDING should only be returned in the array of statuses attached to >> MPI_Waitall. Thus, there is no need to remove it from any request. >> >> In addition, there is another reason why this is unnecessary (and I was too >> lazy to describe it in my previous email). The MPI_Waitall is only allowed >> to return MPI_ERR_PENDING for "not completed" MPI request. Such requests >> will therefore be completed later by the MPI library, and at that moment the >> error in the status will be set to the correct value, or MPI_SUCCESS. >> >> george. >> >> On Mar 21, 2012, at 14:32 , Josh Hursey wrote: >> >>> In the patch for errhandler_invoke.c, you can see that we need to >>> check for MPI_ERR_PENDING to make sure that we do not free the request >>> when we are trying to decide if we should invoke the error handler. So >>> setting the internal req->req_status.MPI_ERROR to MPI_ERR_PENDING made >>> it possible to check for this state in this code. Maybe you have a >>> better way around this, but that is why I chose to implement it this >>> way. >>> >>> I agree that MPI_ERR_PENDING is only to be set in MPI_Waitall. And, in >>> this patch, MPI_ERR_PENDING is only set in that operation. The other >>> operations must look for the MPI_ERR_PENDING and reset the value - >>> since we are using the internal status object to carry it around per >>> above. >>> >>> You said that the implementation in ompi_request_default_wait_all was >>> incorrect. Would you care to elaborate as to what specifically is >>> incorrect? >>> >>> -- Josh >>> >>> On Wed, Mar 21, 2012 at 2:17 PM, George Bosilca <bosi...@eecs.utk.edu> >>> wrote: >>>> Josh, >>>> >>>> I don't agree that these changes are required. In the current standard >>>> (2.2), MPI_ERR_PENDING is only allowed to be returned by MPI_WAITALL, in >>>> some very specific conditions. Here is the snippet from the MPI standard >>>> clarifying this behavior. >>>> >>>>> When one or more of the communications completed by a call to MPI_WAITALL >>>>> fail, it is desireable to return specific information on each >>>>> communication. The function MPI_WAITALL will return in such case the >>>>> error code MPI_ERR_IN_STATUS and will set the error field of each status >>>>> to a specific error code. This code will be MPI_SUCCESS, if the specific >>>>> communication completed; it will be another specific error code, if it >>>>> failed; or it can be MPI_ERR_PENDING if it has neither failed nor >>>>> completed. >>>> >>>> As you can notice, the MPI_ERR_PENDING is only for the error in the status >>>> array and not for the error field in the status attached to the MPI >>>> request. Moreover, we don't use this inside Open MPI at all. >>>> >>>> The usage we're doing in the default_wait_all of MPI_ERR_PENDING is >>>> incorrect as well. I will fix it, once we clarify the issue with your >>>> patch. >>>> >>>> Thanks, >>>> george. >>>> >>>> On Mar 21, 2012, at 13:46 , jjhur...@osl.iu.edu wrote: >>>> >>>>> Author: jjhursey >>>>> Date: 2012-03-21 13:46:15 EDT (Wed, 21 Mar 2012) >>>>> New Revision: 26172 >>>>> URL: https://svn.open-mpi.org/trac/ompi/changeset/26172 >>>>> >>>>> Log: >>>>> Add support for MPI_ERR_PENDING - Per MPI 2.2 p 60 >>>>> >>>>> Tested with: >>>>> ompi-tests/mpich_tester/mpich_pt2pt/truncmult.c >>>>> >>>>> >>>>> Text files modified: >>>>> trunk/ompi/errhandler/errhandler_invoke.c | 9 ++ >>>>> trunk/ompi/request/req_test.c | 32 ++++++++++ >>>>> trunk/ompi/request/req_wait.c | 120 >>>>> +++++++++++++++++++++++++++++++++++++-- >>>>> trunk/ompi/request/request.c | 2 >>>>> trunk/ompi/request/request.h | 5 + >>>>> 5 files changed, 158 insertions(+), 10 deletions(-) >>>> >>>> >>>> _______________________________________________ >>>> devel mailing list >>>> de...@open-mpi.org >>>> http://www.open-mpi.org/mailman/listinfo.cgi/devel >>>> >>> >>> >>> >>> -- >>> Joshua Hursey >>> Postdoctoral Research Associate >>> Oak Ridge National Laboratory >>> http://users.nccs.gov/~jjhursey >>> >>> _______________________________________________ >>> devel mailing list >>> de...@open-mpi.org >>> http://www.open-mpi.org/mailman/listinfo.cgi/devel >> >> >> _______________________________________________ >> devel mailing list >> de...@open-mpi.org >> http://www.open-mpi.org/mailman/listinfo.cgi/devel >> > > > > -- > Joshua Hursey > Postdoctoral Research Associate > Oak Ridge National Laboratory > http://users.nccs.gov/~jjhursey > > _______________________________________________ > devel mailing list > de...@open-mpi.org > http://www.open-mpi.org/mailman/listinfo.cgi/devel