This is the mail archive of the
fortran@gcc.gnu.org
mailing list for the GNU Fortran project.
Re: GIV optimizations
- From: Canqun Yang <canqun at nudt dot edu dot cn>
- To: Steven Bosscher <stevenb at suse dot de>, gcc at gcc dot gnu dot org,fortran at gcc dot gnu dot org
- Date: Tue, 1 Mar 2005 11:18:04 +0800 (HKT)
- Subject: Re: GIV optimizations
- References: <20050228133531.4B7865B185@ds20.nudt.edu.cn> <1656270.1109599430119.SLOX.WebMail.wwwrun@extimap.suse.de>
- Reply-to: Canqun Yang <canqun at nudt dot edu dot cn>
Hi, Gr.Steven
Very thanks for your replyment.
Induction variables are variables whose successive
values form an arithmetic progression over a loop.
Induction variables are often divided into bivs (basic
induction variables), which are explicitly modified by
the same constant amount during each iteration of a
loop, and gives (general induction variables), which
may be modified or computed by a linear-function of a
basic induction variable.
There are three important transformations that apply
to them: strength reduction, induction-variable
removal, and linear-function test replacement. For
example, we can do strength reduction of address givs
which are usually used for address calculation of
array elements. On platforms with post-increment load
and store instructions, this will make chance to
combine a load/store with the following address
calculation instruction.
Also the induction variable splitting is an effective
optimization during loop unrolling.
The new loop optimizer only support a limited gives
analysis (ref. loop-iv.c), and has not yet implemented
giv splitting (ref. ¡®loop-unroll.c¡¯,
¡®analyze_iv_to_split_insn¡¯, and comments in this
function, ¡°For now we just split the basic induction
variables. Later this may be extended for example by
selecting also addresses of memory references.¡±)
I test 171.swim on IA64 system with 1GHz itanium2 CPU.
After implemented or improved/adjusted several compile
optimizations, such as Fortran alias analysis (very
simple one), loop unrolling (the old one), loop arrays
pre-fetching, and giv optimizations, it costs just
9.1s (28s for GCC-4.0.0) to execute the train mode of
171.swim. But, apply those changes on current GCC-
4.0.0 (the old loop unroller was removed), it costs
13.4 to execute this benchmark program, and I found
that giv optimizations are the major factor of such
performance degradation.
Giv optimizations are just features which not
implemented yet in the new loop unroller, so I think
put it in bugzilla is not appropriate.
Steven Bosscher <stevenb@suse.de>:
> On Feb 28, 2005 02:35 PM, Canqun Yang
<canqun@nudt.edu.cn> wrote:
>
> > Hi, all
> >
> > The new loop unroller causes performance
degradation
> > due to the unimplemented giv (general induction
> > variable) optimizations.
> >
> > When will it be implemented?
>
> Will you be more specific so we can have a clue what
you are
> talking about? Filing bugs in bugzilla showing the
problem
> would help.
>
> Gr.
> Steven
>
>
Canqun Yang
Creative Compiler Research Group.
National University of Defense Technology, China.