George,

Thanks for your reply.

Yes, as you explained, a case specifying an inactive request for MPI_Test
is OK. But the problem is a case specifying an inactive request for
MPI_Wait, MPI_Waitall, and MPI_Testall, as I explained in my first mail.

See code below:

        /* make a inactive request */
        MPI_Recv_init(&buf, 1, MPI_INT, 1, 0, MPI_COMM_WORLD, &request);
        MPI_Start(&request);
        do {
            MPI_Test(&request, &completed, &status);
        } while (completed == 0);

        /* wait for an inactive request */
        MPI_Wait(&request, &status);

In this code, the ompi_request_t object is marked as inactive in
MPI_Test (ompi_request_default_test) but its req_status field remains
unchanged.

Succeeding MPI_Wait (ompi_request_default_wait) sets a user-supplied
status object using req_status field of the request in req_wait.c
line 57.

    if( MPI_STATUS_IGNORE != status ) {
        status->MPI_TAG    = req->req_status.MPI_TAG;
        status->MPI_SOURCE = req->req_status.MPI_SOURCE;
        status->_ucount    = req->req_status._ucount;
        status->_cancelled = req->req_status._cancelled;
    }

Thus, the user will see a non-empty status after MPI_Wait in the code
above.

You can see this phenomenon with my status.c attached in my first mail.
Run with -n 2.

To avoid this problem, we have two options.
 A. Set req_status field to empty when we mark a request
    as inactive, or
 B. Add if-statements for an inactive request in order to set
    a user-supplied status object to empty in ompi_request_default_wait
    etc.

For least astonishment, I think A. is better.

Regards,
Takahiro Kawashima,
MPI development team,
Fujitsu

> Takahiro,
> 
> I fail to see the cases your patch addresses. I recognize I did not have the 
> time to look over all the instances where we deal with persistent inactive 
> requests, but at the first occurrence, the one in req_test.c line 68, the 
> case you exhibit there is already covered by the test "request->req_state == 
> OMPI_REQUEST_INACTIVE". I see similar checks in all the other test/wait 
> files. Basically, it doesn't matter that we leave the last returned error 
> code on an inactive request, as we always return MPI_STATUS_EMPTY in the 
> status for such requests.
> 
> Thanks,
>   george.
> 
>  
> On Oct 15, 2012, at 07:02 , "Kawashima, Takahiro" 
> <t-kawash...@jp.fujitsu.com> wrote:
> 
> > Hi Open MPI developers,
> > 
> > How is my updated patch?
> > If there is an another concern, I'll try to update it.
> > 
> >>>>> The bugs are:
> >>>>> 
> >>>>> (1) MPI_SOURCE of MPI_Status for a null request must be MPI_ANY_SOURCE.
> >>>>> 
> >>>>> (2) MPI_Status for an inactive request must be an empty status.
> >>>>> 
> >>>>> (3) Possible BUS errors on sparc64 processors.
> >>>>> 
> >>>>>  r23554 fixed possible BUS errors on sparc64 processors.
> >>>>>  But the fix seems to be insufficient.
> >>>>> 
> >>>>>  We should use OMPI_STATUS_SET macro for all user-supplied
> >>>>>  MPI_Status objects.
> >>>> Regarding #3, see also a trac 3218. I'm putting a fix back today. Sorry
> >>>> for the delay. One proposed solution was extending the use of the
> >>>> OMPI_STATUS_SET macros, but I think the consensus was to fix the problem
> >>>> in the Fortran layer. Indeed, the Fortran layer already routinely
> >>>> converts between Fortran and C statuses. The problem was that we started
> >>>> introducing optimizations to bypass the Fortran-to-C conversion and that
> >>>> optimization was employed too liberally (e..g, in situations that would
> >>>> introduce the alignment errors you're describing). My patch will clean
> >>>> that up. I'll try to put it back in the next few hours.
> >>> 
> >>> Sorry, I didn't notice the ticket 3218.
> >>> Now I've confirmed your commit r27403.
> >>> Your modification is better for my issue (3).
> >>> 
> >>> With r27403, my patch for issue (1) and (2) needs modification.
> >>> I'll re-send modified patch in a few hours.
> >> 
> >> The updated patch is attached.
> >> This patch addresses bugs (1) and (2) in my previous mail
> >> and fixes some typos in comments.

Reply via email to