Thanks Josh.

  george.

On Mar 22, 2012, at 10:09 , Josh Hursey wrote:

> Should be fixed in r26177.
> 
> On Thu, Mar 22, 2012 at 7:51 AM, Josh Hursey <jjhur...@open-mpi.org> wrote:
>> Fair enough. Upon further inspection of the request_invoke() handler,
>> you are correct that it is not required here if we do not modify the
>> default value for req_status.MPI_ERROR.
>> 
>> I'll work on a revised patch this morning and commit. One that does
>> not use this field.
>> 
>> Per your comment from your first message:
>>  "The usage we're doing in the default_wait_all of MPI_ERR_PENDING is
>> incorrect as well."
>> I'm glad that you no longer think the patch is "incorrect", but just
>> not implemented as well as it could be.
>> 
>> Thanks,
>> Josh
>> 
>> On Thu, Mar 22, 2012 at 1:40 AM, George Bosilca <bosi...@eecs.utk.edu> wrote:
>>> 
>>> 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
>>> 
>>> 
>>> _______________________________________________
>>> 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
> 
> 
> 
> -- 
> 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


Reply via email to