(j3.2006) Should Local Variables of Impure Elemental Procedures Have the SAVE Attribute?

Rasmussen, Craig E rasmussn
Wed Oct 5 17:45:15 EDT 2011


I agree with Bill.  Since the elements of the array are executed in array element order, the result is well defined.  I think OpenMP even has syntax for this, if I understand OMP (which I don't) there are thread -private variables and thread-shared (?) variables, the thread-shared variables would act like SAVE?

-craig


On Oct 5, 2011, at 3:20 PM, Bill Long wrote:

> 
> 
> On 10/5/11 3:46 PM, Craig Dedo wrote:
>> Everyone:
>> 
>> It appears that there is another oversight in the definition of IMPURE
>> ELEMENTAL procedures. Should impure elemental procedures be allowed to
>> have local variables with the SAVE attribute? If so, what should happen
>> if such procedures are called with array-valued arguments?
>> 
> 
> I don't see why definitions of local variables with the SAVE attribute 
> are any worse than, for example, definitions of variables accessed by 
> use association.  Or STOP statements, or any of a long list of PURE 
> restrictions that do not apply for IMPURE procedures.
> 
> Certainly allowing a local variable with the SAVE attribute that is 
> never defined during execution of the procedure is harmless.   Even if 
> it gets defined, as in your example, I don't see a real problem.  If the 
> call arguments are arrays, then the procedure is executed once for each 
> of the elements of the array.  There will be inefficiencies associated 
> with constantly storing the variable to memory, but it should execute 
> correctly.  Execution of an IMPURE elemental with array arguments does 
> not imply that the execution can be done in parallel.
> 
> Cheers,
> Bill
> 
>> In thinking this over, it appears that this is another situation where a
>> constraint of PURE procedures should also apply to impure elemental
>> procedures. Are there any possible advantages to allowing impure
>> elemental procedures to have local variables with the SAVE attribute? If
>> they are allowed, what complications could result from such procedures
>> being called with array-valued arguments?
>> 
>> This afternoon I wrote up a proposed interpretation. What do others
>> think of this approach? If there are flaws in my approach, what
>> alternatives would you prefer and why?
>> 
>> [Begin proposed interpretation request]
>> 
>> NUMBER: F08/????
>> 
>> TITLE: Local Variables of Impure Elemental Procedures
>> 
>> KEYWORDS: IMPURE, ELEMENTAL, SAVE
>> 
>> DEFECT TYPE: Erratum ???
>> 
>> STATUS: Submitted with proposed answer
>> 
>> QUESTIONS:
>> 
>> Consider the following impure elemental subroutine:
>> 
>> Impure Elemental Subroutine Swap_DP ( R1, R2 )
>> 
>> Use, Intrinsic :: ISO_Fortran_Env
>> 
>> Implicit None ! Force explicit declaration of all data objects.
>> 
>> ! Declare subroutine arguments.
>> 
>> Real (Kind=Real64), Intent (InOut) :: R1, R2
>> 
>> ! Declare local variables.
>> 
>> Real (Kind=Real64), Save :: Temp
>> 
>> ! Execution starts here.
>> 
>> Temp = R1
>> 
>> R1 = R2
>> 
>> R2 = Temp
>> 
>> End Subroutine Swap_DP
>> 
>> Q1. Was it intended to be standard-conforming to allow impure elemental
>> 
>> procedures to have local variables with the SAVE attribute?
>> 
>> Q2. If it is standard-conforming, what should happen if an impure elemental
>> 
>> procedure is called with array-valued arguments with the same shape and the
>> 
>> impure elemental procedure has local variables with the SAVE attribute?
>> 
>> ANSWERS:
>> 
>> A1.
>> 
>> This was not intended to be standard-conforming. Omission of the
>> 
>> requirement for non-saved local variables in impure elemental procedures
>> 
>> was inadvertent. An edit is supplied to correct this oversight.
>> 
>> A2.
>> 
>> There could be serious complications if the SAVE attribute is allowed for
>> 
>> local variables of impure elemental procedures. Therefore, local variables
>> 
>> in such procedures should not have the SAVE attribute.
>> 
>> EDITS to 11-007r1:
>> 
>> [314:7] Insert new constraint at the end of 12.8.1
>> 
>> "C1290b A local variable of an elemental subprogram, or of a BLOCK construct
>> 
>> within an elemental subprogram, shall not have the SAVE attribute."
>> 
>> SUBMITTED BY:
>> 
>> Craig T. Dedo
>> 
>> 17130 Burleigh Place
>> 
>> PO Box 423
>> 
>> Brookfield, WI 53008-0423
>> 
>> USA
>> 
>> HISTORY: 11-??? m196 F08/???? submitted with proposed answer
>> 
>> [End of proposed interpretation request]
>> 
>> Sincerely,
>> 
>> *Craig T. Dedo*
>> 
>> 17130 W. Burleigh Place
>> 
>> P. O. Box 423 Mobile Phone: (414) 412-5869
>> 
>> Brookfield, WI 53008-0423 E-mail: <craig at ctdedo.com
>> <mailto:craig at ctdedo.com>>
>> 
>> USA
>> 
>> Linked-In: http://www.linkedin.com/in/craigdedo
>> 
> 
> -- 
> Bill Long                                           longb at cray.com
> Fortran Technical Support    &                 voice: 651-605-9024
> Bioinformatics Software Development            fax:   651-605-9142
> Cray Inc./Cray Plaza, Suite 210/380 Jackson St./St. Paul, MN 55101
> 
> 
> _______________________________________________
> J3 mailing list
> J3 at j3-fortran.org
> http://j3-fortran.org/mailman/listinfo/j3





More information about the J3 mailing list