[LLVMdev] Speculative Loop Parallelization on LLVM IR

Tobias Grosser grosser at fim.uni-passau.de
Fri Jun 18 07:03:07 PDT 2010


Hi Javed,


On 06/18/10 14:07, Javed Absar wrote:
> Hi:
> I worked on loop-optimizations techniques previously using ORC.
> Currently i see lots of research on speculative parallelization of
> loops ... specially because multicores [for embedded systems] is
> becoming popular. In other words, because you have
> multiple cores, you can start some loops [Fast-Track] as if there is no
> or low data-dependence [Partial Parallel Loop-Nest].
> The normal part is to check later if there was some violation and then
> rollback etc. [something like that ... I dont think people want to hear the
> full story here].
> What do you guys think about the feasibility of "speculative run-time
> loop optimization' using LLVM IR as base.
> I know there are lots of issues to it -
> 1. Loop transformation requires tools like PolyLib (Polyhedral
> analysis). They are too computationally expensive for
> run-time optimization.
There is Polly (still in development)
http://wiki.llvm.org/Polyhedral_optimization_framework

And to say this. The current problem is not very often the 
computationally complexity. However it might be that we have not yet 
reached the point, when this gets relevant.

> 2. I am not clear how to launch threads at LLVM IR level (you do need to
> create new threads for some of these RT speculative loop parallelization
> techniques).
You could add calls to the posix functions that create a thread to the 
LLVM-IR or you could use some higher level libraries that support thread 
creation.

The OpenMP runtime libraries e.g. can help you with this. Here a link to 
the GNU libaries that could be used to try this approach.
http://gcc.gnu.org/onlinedocs/libgomp/

> Is somebody already doing something like this? Does this proposal make
> sense even to start...
I do not yet understand what you want to do.

You just want to execute some loops in parallel without knowing if they 
have data dependencies. And than afterwords you would like to check if 
there where dependencies.

How would you check for violated dependencies?

Can you give an example of a loop, that would have no dependencies and 
that you would like to improve?

Tobi



More information about the llvm-dev mailing list