[MPI3 Fortran] MPI buffer arguments - void and call-by-reference
Aleksandar Donev
donev1 at llnl.gov
Mon Feb 16 14:34:24 CST 2009
Hi,
> Um. While that is true, to a first approximation, it isn't really. The
> reason is that all three of those have subtly different constraints on
> when a compiler must not use copy-in/copy-out and other optimisations.
While this is true, I am really not sure what your message was meant to
illustrate or clarify...it was confusing even to me (and I am at least
familiar with the subtleties).
> The only one of those that ABSOLUTELY blocks copy-in/copy-out and the
> more-or-less equivalent optimisations is VOLATILE. ASYNCHRONOUS does
> the least blocking, and is therefore the most efficient.
As far as copy in/out is concerned, VOLATILE and ASYNCHRONOUS are
identical as far as the standard is concerned. Specifically, a situation
where copy in/out may be required to be performed is prohibited by
compile-time constraints. This is not quite identical to saying "though
shall not perform copy in/out", but the reason the compile-time
constraints are there is so as to ensure that the argument passing can
be done by pass-by-reference.
I never objected to using ASYNCHRONOUS to handle non-blocking data
transfers, as you know well. However, I want to (partially) agree with
Bill that to truly properly integrate non-blocking operations with the
Fortran standard *both* the TARGET and the ASYNCHRONOUS attribute are
required for the buffer, both the dummy *and* the actual. The
ASYNCHRONOUS attribute does not have guarantees about pointer
association persisting across argument passing (this is equivalent to
guarantees against copy in/out)...only TARGET does and it is the
intended way to allow routines to save pointers to the actual inside a
routine (which MPI does). At the same time, TARGET does not allow you to
asynchronously change the value of the target. So both are needed.
That said, the ASYNCHRONOUS attribute, or a new attribute with similar
semantics, can be extended to include the effects of pointer association
argument passing semantics of TARGET.
Best,
Aleks
More information about the mpiwg-fortran
mailing list