(j3.2006) "Contiguous" doesn't quite do what I need
Mon Mar 26 13:01:31 EDT 2007
Van Snyder wrote:
>If I have a contiguous multidimensional array for which I know the
>extent of the leading dimension is 3, or of the two leading dimensions
>is 2x2, and I do an operation on (1:3,:) or (1:2,2:2,:), any benefit the
>processor might have gotten from the contiguous attribute at least
>partly (mostly?) evaporates, because the processor doesn't know the
>extent from the declaration.
If you are saying that explicit-shape declarations with constant bounds
lead to more efficient code that assumed-shape declarations, then I
certainly agree. In the later case the processor has to extract the
extent from the dope vector, involving one memory reference. But more
advanced compiler technology is needed to make any use of the actual
value in generating optimal code. Same is true for explicit-shape
arrays if the bounds are variables.
>It has to assume that the spacing along
>the second (third) dimension comes from the (product of the) length(s)
>of the earlier dimension(s).
Well, the compiler does not generate code to do the products each time
- only once when the array is allocated. That computed spacing
information is also in the dope vector - one more memory reference,
though probably from cache by this point.
>This will lead me to clutter my code with
>#ifdef's that result from experiments that determine whether it's better
>for a particular processor to peel loops or exploit contiguity, since
>none can do both. What a dog's breakfast we're making.
I'm not sure how any of this relates to loop peeling - maybe loop
unwinding. Either of which is independent of contiguity. I don't think
we (j3) are making a dog's breakfast. Sounds like this particular code
might qualify, though.
Bill Long longb at cray.com
Fortran Technical Support & voice: 651-605-9024
Bioinformatics Software Development fax: 651-605-9142
Cray Inc., 1340 Mendota Heights Rd., Mendota Heights, MN, 55120
More information about the J3