(j3.2006) [MPI3 Fortran] Feedback from Fortran J3 meeting
Tue May 27 13:17:20 EDT 2008
On Tuesday 27 May 2008 08:55, Dan Nagle wrote:
> The MPI specification says "don't touch the buf memory" between
> the MPI async send/recv and the MPI wait. ?(The other actual args
> may be treated ordinarily.)
This is exactly what we say for ASYNCHRONOUS objects (don't reference or
define them while they are a pending I/O affector or whatever we call that).
> What Fortran should say is "between these two subroutine references,
> don't read/write this actual argument" and I don't think we currently
> have a way to say that. ?:-(
We don't, but we do have the BLOCK construct to delimit the region where
touching the actual argument is "dangerous". There is a difference of course,
as you say, VOLATILE allows one to reference/define the actual during the
BLOCK and it is reloaded/loaded from memory thus possible messing up the MPI
action. But in this case I think just trusting the programmer not to meddle
with the actual (as per MPI standard instructions) inside the BLOCK is good
enough of a solution, especially given MPI is external to our standard.
I would have preferred extending ASYNCHRONOUS to user-defined async I/O, but
that's more work than we can do now. I think for now the most important thing
is to find a good way (pleeaaase!) to handle void* arguments.
More information about the J3