This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: GIV optimizations


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]