Path: utzoo!utgpu!attcan!uunet!lll-winken!lll-lcc!ames!mailrus!cornell!uw-beaver!uw-june!david From: david@june.cs.washington.edu (David Callahan) Newsgroups: comp.lang.fortran Subject: Re: IDENTIFY statement in Fortran 8x Message-ID: <6967@june.cs.washington.edu> Date: 18 Jan 89 03:56:37 GMT References: <4462@pitt.UUCP> Reply-To: david@uw-june.UUCP (David Callahan) Organization: U of Washington, Computer Science, Seattle Lines: 39 In article <4462@pitt.UUCP> whit@pitt.UUCP (Debbie Whitfield) writes: > As I was reading the ACM TOPLAS, Oct. 1987, article written by >Randy Allen and Ken Kennedy (Automatic Translation of FORTRAN Programs >to Vector Form), I ran across the IDENTIFY construct. Their example >is: > IDENTIFY /1:M/ D(I) = C(I,I+1) >which is a pseudonym for the diagonal of an array. I am curious about >what is considered as a valid expression for describing elements of C. >Can any expression be used? What about function calls? J. Giles has pointed out that this syntax is not current. The first draft of the Allen-Kennedy paper was in 1982 and neither the paper nor the tool they discuess has kept up with Fortran 8X sincey then, >How would this be implemented? Does the expression have to be >computable at compile time or run time? The restrictions are that, at the time the statement is executed, that each subscript in the base array (C in this example) is a linear combination of the subscripts of the virtual array plus constants. Each subscript expression in the identify statement defines an affine map into the integers. Collectively these maps define an affine map from Z^n into Z^m where Z is the set of integers and n is the dimensionality of the virtual array (D) and m is the dimensionality of the base array (C). Assuming that each array has a "dope vector" which defines an affine function from subscript values into "memory", the dope vector for the virtual array is computed by composing the dope vector for the base array with the affine map defined by the IDENTIFY statement. This amounts to (in the general case) multiplication of a vector by a matrix to get a new vector. David Callan, Tera Computer, Seattle WA.