Hi Tobias,
>
>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.
>
>

I think this is a good idea in the long run (in the 4.5 timeframe). My only 
issue with it is that we have several bugs today even without generating code 
unless a transformation is picked. Of cpu2006 benchmarks, all but 4 fail to 
build. We have memory leak issues, we have not tried to bootstrap gcc with 
graphite enabled. I think that expanding the coverage or overhead testing only 
makes sense after we have fixed the existing bugs.

I personally like the "-fgraphite-identity" approach the best.

Thanks,
Harsha

>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?
>
>See you
>Tobi
>

Reply via email to