[Mpi-22] Another MPI-2.2 attribute ambiguity?

Jeff Squyres jsquyres at [hidden]
Fri May 22 07:39:01 CDT 2009



Imagine a Fortran communicator keyval copy function callback like this  
(typed off the top of my head; pardon typos):

       SUBROUTINE COPY_FUNCTION1(OLDCOMM, KEYVAL, EXTRA_STATE, AVALIN,  
AVALOUT, FLAG, IERR)
       ...
       INTEGER EXTRA_STATE
       INTEGER IERR
       EXTRA_STATE = EXTRA_STATE + 1
       WRITE *, "Extra state is: ", EXTRA_STATE
       IERR = MPI_SUCCESS
       END

Now suppose MPI_COMM_CREATE_KEYVAL is invoked like this:

       INTEGER EV = 7
       CALL MPI_COMM_KEYVAL_CREATE(COPY_FUNCTION1, ..., EV, IERR)

I think we all agree that the output the first time that  
COPY_FUNCTION1 is invoked should be 7.  But what is the output the  
second time it is invoked -- 7 or 8?  That is the question.

I think Iain has conclusively show that in this case:

       INTEGER EV = 7
       CALL MPI_COMM_KEYVAL_CREATE(COPY_FUNCTION1, ..., EV + 3, IERR)
       EV = 42

the output from the first call to COPY_FUNCTION1 still needs to be 10.

The point is that the MPI implementation needs to *copy* the INTEGER  
value into internal storage and use *that* storage when calling  
COPY_FUNCTION1.  If for no other reason than the value may be the  
result of an expression, and that storage disappears after the call to  
MPI_COMM_KEYVAL_CREATE completes (as in the above example).

I'm not sure what you're referring to with the array stuff -- the  
Fortran prototype for the callback function says that the extra value  
can only be a single INTEGER...?

On May 21, 2009, at 4:41 PM, William Gropp wrote:

> I'm not sure what "change the value" means in #1.  I think that you
> mean "if we interpret extra_data as a pointer to a Fortran data item,
> the MPI implementation will pass this pointer (by value) to the
> callback.  If the callback stores through this pointer, then
> (naturally) the afore mentioned data item will be changed.  If that's
> what #1 means, then yes, that's the right answer.  Note that the
> extra_data could be a pointer to an array of arbitrary size, and the
> call back could update any part of the array. Saving a copy of what
> extra_data points at (is that what #2 is doing?) is going to be
> tricky, since you don't know the size of the thing to copy (without a
> lot of help from the compiler in Fortran).
>
> Bill
>
> On May 19, 2009, at 7:55 PM, Jeff Squyres wrote:
>
> > So then you're in favor of #1 from my original post, right?
> >
> >     http://lists.mpi-forum.org/mpi-22/2009/05/0407.php
> >
> >
> > On May 19, 2009, at 4:39 PM, William Gropp wrote:
> >
> >> Silly me, I missed that.
> >>
> >> In Fortran (particularly thinking in terms of Fortran 77, since  
> that
> >> was the original design), the Fortran callback should be able to do
> >> things like increment the "extra data" - i.e., if the extra data  
> is a
> >> counter, the Fortran callback should be able to increment it.   
> Since
> >> Fortran 77 has no pointers (and pointers in Fortran 90 aren't the
> >> same
> >> as addresses), having an address is worthless in a Fortran 77
> >> program.  So if the MPI implementation stores the address of the
> >> extra
> >> data and passes that to the call back (by value, so Fortran sees  
> the
> >> address of the extra data), users should get what they expect in
> >> Fortran.
> >>
> >> Bill
> >>
> >> On May 19, 2009, at 12:22 PM, Iain Bason wrote:
> >>
> >>>
> >>> On May 19, 2009, at 1:16 PM, William Gropp wrote:
> >>>
> >>>> MPICH2 passes the value of the extra_state that was saved in the
> >>>> internal storage to the callback routine, which is case 2 (the  
> copy
> >>>> is implicit as the value is passed to the routine and C semantics
> >>>> ensures that the value isn't changed).
> >>>
> >>> But this is the Fortran interface, not the C interface.
> >>>
> >>> Iain
> >>>
> >>
> >> William Gropp
> >> Deputy Director for Research
> >> Institute for Advanced Computing Applications and Technologies
> >> Paul and Cynthia Saylor Professor of Computer Science
> >> University of Illinois Urbana-Champaign
> >>
> >>
> >>
> >>
> >> _______________________________________________
> >> mpi-22 mailing list
> >> mpi-22_at_[hidden]
> >> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi-22
> >>
> >
> >
> > --
> > Jeff Squyres
> > Cisco Systems
> >
> > _______________________________________________
> > mpi-22 mailing list
> > mpi-22_at_[hidden]
> > http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi-22
>
> William Gropp
> Deputy Director for Research
> Institute for Advanced Computing Applications and Technologies
> Paul and Cynthia Saylor Professor of Computer Science
> University of Illinois Urbana-Champaign
>
>
>
>
> _______________________________________________
> mpi-22 mailing list
> mpi-22_at_[hidden]
> http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi-22
>


-- 
Jeff Squyres
Cisco Systems




More information about the Mpi-22 mailing list