Related articles |
---|
LDD/STD Optimizations pardo@cs.washington.edu (1992-03-03) |
Re: LDD/STD Optimizations idacrd!desj@uunet.UU.NET (1992-03-09) |
Re: LDD and STD on RISC rcg@lpi.liant.com (1992-03-09) |
Re: LDD/STD Optimizations pardo@cs.washington.edu (1992-03-10) |
Re: LDD/STD Optimizations preston@dawn.cs.rice.edu (1992-03-10) |
Re: LDD/STD Optimizations idacrd!desj@uunet.UU.NET (1992-03-11) |
Newsgroups: | comp.compilers |
From: | pardo@cs.washington.edu (David Keppel) |
Keywords: | optimize, architecture |
Organization: | Computer Science & Engineering, U. of Washington, Seattle |
Date: | Tue, 3 Mar 1992 18:50:34 GMT |
Preston and I have been having an e-mail discussion about the use of
LDD and STD. He's brought up some good points, so with his permission
here's a summary. Everything is paraphrased.
Preston:
Code replication can work. But if there's more than one array
refernced in a loop we'll see exponential explosion (exponential
in the number of things that must be aligned).
Pardo:
But you can have code for the general case and code for the all-
things-are-aligned cases and none of the rest:
if (aligned(a) && aligned(b) && ..) {
... use ldd ...
} else {
... don't use ldd ...
}
I believe most arrays will be double-aligned. `malloc' returns
double-aligned memory and the compiler can be told to allocate
stack arrays on double boundaries. If most arrays are aligned,
then the ``everything is aligned'' code will be used most of the
time.
Preston:
Maybe I'm just overly used to FORTRAN, but I see a lot of code
where unaligned array slices or odd-size columns get passed.
Another issue is safety. To use LDD, unroll and jam. If there
are any stores in the loop body you need to ensure the store in
iteration I doesn't store to a location that might be one used in
I+1.
The two-versions trick is like procedure cloning. We're looking at
it for sharper interprocedural information for constants, aliasing,
and alignment.
Pardo:
It might be worth doing a brief instrumentation study using an
editor:
a[x] => (dump (1234, &a[0], &a[x], sizeof(&a[0])), a[x])
Preston:
Using LDD/STD for save/restore at calls is easy. Other places are
hard.
Pardo:
True. In current codes, though, calls are substantial overhead.
Preston:
What about `ldq/stq'? Are they worth puttig in the architecture?
Maybe we can relax the LDD/STD alignment constraints.
Pardo:
You have to repeat the analysis and see if it's valuable.
My guess is that you'll find LDQ/STQ aren't so useful.
The hardware people (includes me) will argue that relaxing the
alignment constraints makes slower and/or more complicated
implementations. Using LDD/STD only when you can guarantee
static alignment will still lead to perf. improvements.
Some (not me; I don't have the data to know) will argue that the
alignment-required implementation is enough faster or sooner to
market that the reduction in general utility is justified.
Preston:
It's not that the problems are insurmountable; but they're all
good reasons you don't generally see this code emitted today.
Thanks, Preston!
--
Return to the
comp.compilers page.
Search the
comp.compilers archives again.