[cfe-dev] AST transformations for deterministic parallel extenstion

david raila raila at illinois.edu
Wed Nov 3 10:02:19 PDT 2010


     I could use a little advice....
I am implementing some parallel extensions using clang, one of which is 
a parallel foreach of the form:


> void doParallelForeach() {
>     foreach (int i in 0, 10) {
>         printf("Parallel %d\n", i); // runs in parallel
>         }
> }

I want to use Intel TBB as the runtime to accomplish this.   A TBB 
parallel for looks like:

> struct parallel {
>     void operator()( const tbb::blocked_range<int>& range ) const {
>     printf("Parallel %d\n", range.begin());
>     }
> };
>
> void do parallelTBB() {
>     parallel_for(blocked_range<int>(1, 10), parallel() ); // standard tbb
> }

So I closely followed ForStmt and made a
> class ForeachStmt : public Stmt 
that captures the index and the body etc.

Then I modified the Parser and added Sema::ActOnForeachStmt


So my question is this....  How do I transform this Foreach statement at 
this point
in order to:
     1.  Inject struct and operator() definition in the proper (global?) 
scope with the body of
the foreach *moved* there?
     2. Modify the body to call to create the range and call the 
parallel_for template that is defined in a tbb header?

So I should also ask, as a strong systems programmer but without a 
compiler background:  Am I on the right path and working in the right
parts of clang or are there other, better ways to get this done?

Thanks...

D









More information about the cfe-dev mailing list