Aleksandar Donev wrote:
On Monday 09 February 2009 14:59, Rolf Rabenseifner wrote:
Fortran compilers are allowed to choose call-by-incopy-and-outcopy instead of call-by-reference.
There are already at least two cases where Fortran compilers are not allowed to choose. These are when both the actual and the dummy have the attribute: TARGET, VOLATILE, and ASYNCHRONOUS. Perhaps adding yet
Just to be clear, the "and" above should be "or". You do not need to specify all of these options - one will do. The ultimate problem comes because a pointer (inside the MPI chambers) has been associated with the buffer and actions on the buffer are being taken through that pointer. The TARGET attribute identifies a variable as being (possibly) the target of a (Fortran) pointer. Given the similarity of the situations, it would be reasonable to require that a buffer have the TARGET attribute if it is used as the memory for a non-blocking MPI data transfer routine. Cheers, Bill
another attribute where the compiler does not have freedom is useful, but I am yet to be convinced.
So first I want to ask: Other than with non-blocking transfer (which was the subject of a separate message), what is the problem with copy in/out? If it is a performance issue, than that is within the realm of compiler optimization: As you said, the compiler has the choice and it will usually choose the faster (often compilers include a run time check to see if the actual is contiguous).
Meaning: Same as what currently done, i.e., call-by-reference on the caller side, if call-by-reference is possible (i.e., not for non-contiguous subarrays)
What if call-by-reference is not possible? How is this different from what is currently there and why is it useful enough over what is already there to warrant inclusion in the Fortran standard?
Thanks, Aleks
-- Bill Long [email protected] Fortran Technical Support & voice: 651-605-9024 Bioinformatics Software Development fax: 651-605-9142 Cray Inc., 1340 Mendota Heights Rd., Mendota Heights, MN, 55120