Hi,

On Fri, 2008-10-10 at 23:31 +0200, Albert Cohen wrote:
> Tobias Grosser wrote
> > Hi graphities,
> > 
> > graphite consists of four flags "-floop-block", "-floop-interchange",
> > "-floop-stripmine" and "-fgraphite".
> > 
> > If any of these flags is set, we enable the graphite pass and we search
> > for SCoPs.
> > For every SCoP we try to apply transformations specified with
> > "-floop-block", "-floop-interchange" or "-floop-stripmine". But only if
> > we could apply a transformation, we replace the SCoP with new code
> > generated from the GRAPHITE data structures. Otherwise we do not touch
> > the GIMPLE representation.
> > If we only specify "-fgraphite", we never generate code for any SCoP, as
> > we never tried any transformation. So just using "-fgraphite" is
> > useless.
> > 
> > What is missing is a way to make GRAPHITE always generate code, even if
> > we did not apply any transformation.
> > 
> > This has two benefits:
> > - We can check the overhead the GIMPLE -> GRAPHITE -> GIMPLE
> > transformation costs.
> > - Wider test coverage, as we are able to run the code generator for
> > every SCoP, not only the SCoPs, we are able to transform.
> > 
> > 
> > Now:
> > ----
> > 
> > -fgraphite: Do nothing.
> > -floop-block, -floop-interchange, -floop-stripmine: Try these
> > transformations.
> > 
> > Only "-fgraphite":           Do nothing
> > Only "-floop-block":         Only loop blocked SCoPs are changed.
> > "-fgraphite -floop-block":   Only loop blocked SCoPs are changed.
> > 
> > One solution: Reuse -fgraphite
> > ------------------------------
> > 
> > -fgraphite: Enable always code generation
> > -floop-block, -floop-interchange, -floop-stripmine: Try these
> > transformations.
> > 
> > Only "-fgraphite":           The identity transformation for all SCoPs.
> > Only "-floop-block":         Only loop blocked SCoPs are changed.
> > "-fgraphite -floop-block":   All SCoPs are are changed. Some SCoPs are
> >                          loop blocked, others just the identity 
> >                          transformation.
> > 
> > This allows us to get all the benefits but (mis)uses the -fgraphite
> > flag. At the moment it has no other meaning, but I could think of it
> > containing an automatic optimizer, that applies all available graphite
> > transformations or selects them automatically.
> > 
> > The other solution is: Use -fgraphite-identity
> > ----------------------------------------------
> > 
> > -fgraphite: Enable always code generation
> > -floop-block, -floop-interchange, -floop-stripmine, -fgraphite-identity:
> > Try these transformations.
> > 
> > Only "-fgraphite":           Do nothing. Free for later use.
> > Only "-floop-block":         Only loop blocked SCoPs are changed.
> > Only "-fgraphite-identity":  The identity transformation for all SCoPs.
> > "-fgraphite-identity
> >  -floop-block":              All SCoPs are are changed. Some SCoPs are
> >                          loop blocked, others just the identity 
> >                          transformation.
> > 
> > This makes sense, as we only generate code for applied and enabled
> > transformations. These are loop-blocking, interchange, stripmine and
> > - may be - the new and very easy to write identity transformation, that
> > does nothing, but enable code generation.
> > 
> > What du you think about these different solutions?
> 
> Hi Tobias,
> 
> I am in favor of prefixing all transformation passes with -fgraphite-
> leading to -fgraphite-block -fgraphite-stripmine -fgraphite-identity and 
> the new ones to come. These flags should probably disappear at some 
> point, as a more unified optimization heuristic should arise that 
> combines all transformations, with some parameters to influence the 
> profitability heuristic.
> 
> I agree -fgraphite should be reserved for later use, but not mandatory 
> to use any of the new -fgraphite-xxx options.
> 
> This is just a suggestion with a partial understanding of the option 
> naming scheme in GCC only!

I see what you mean. For me all the graphite flags seem to be like
temporary flags, as the idea of the polyhedron model is to allow a lot
of different optimizations, that can not be split up to loop blocking 
So in this case the current flags seem for me to just enable different
demo/test optimizers in graphite, that are replaced later by a better
general one. So I like your idea.

I will submit a patch containing this idea.

See you
Tobias

Reply via email to