The goal of automatic parallelization is to transform a sequential loop
to a parallel loop. Two main approaches exist, static and dynamic
approaches ; people think that these two approaches are two enemy
approaches, the goal of my thesis is to show that the opposite is true
by proving that both methods can work together to achieve better
performance. The second part of this work is to enable Graphite pass in
GCC to communicate with external optimization tools. ( Graphite is a new pass in GCC based on the polyhedral model, it's being now actively developed by AMD, IBM and INRIA/Alchemy).
Hardware is going to the multicore era quickly, software people can not
keep on, programming these parallel systems is not as easy as
programming sequential machines. Through automatic parallelization, the
programmer will be able to write a sequential code and leave the
difficult parallelization step to the compiler.
When the compiler tries to parallelize a loop, sometimes it can
decide at compile time whether this loop can be transformed into a
parallel loop or not, but sometimes it can not decide, due to the lack
of information. When the compiler can decide at compile time, the
parallelization is static ; when it can not, the parallelization is
called dynamic (another analysis is done at run time to test whether
tho code is parallelizable).