[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