wiki:Insieme

Version 1 (modified by zmanchun, 10 years ago) ( diff )

--

A simple OpenMP program

#include <omp.h>
#define N 10

int main (int argc, char * argv[]){
  double a[N];
  int i;

#pragma omp parallel
#pragma omp for
  for(i=0; i<N; i++)
      a[i] = 0;
}

Insieme IR:

let fun000 = fun(ref<vector<real<8>,10>> v87, int<4> v88, int<4> v89, int<4> v90) -> unit {
    for(decl int<4> v64 = v88 .. v89 : v90) {
        ((ref_vector_to_ref_array(v87)&[int_to_uint(v64, 4)]) := 0.0);
    };
};

let fun001 = fun(ref<array<int<4>,1>> v1, uint<8> v2, uint<8> v3) -> unit {
    return unit;
};

let fun002 = fun(ref<vector<real<8>,10>> v103) -> unit {
    {
        pfor(getThreadGroup(0), 0, 10, 1, bind(v91, v92, v93){fun000(v103, v91, v92, v93)});
        (barrier());
    };
    mergeAll();
};

let fun003 = fun(ref<int<4>> v105) -> unit {
    {
        (v105 := 10);
    };
    mergeAll();
};

let fun004 = fun(int<4> v2, ref<array<ref<array<char,1>>,1>> v3) -> int<4> {
    decl ref<vector<real<8>,10>> v4 = ( var(undefined(type<vector<real<8>,10>>)));
    decl ref<int<4>> v54 = ( var(undefined(type<int<4>>)));
    {
        merge(parallel(job(([1-inf])){
            bind(){fun002(v4)}
        }));
    };
    merge(parallel(job(([1-inf])){
        bind(){fun003(v54)}
    }));
    return 0;
};

// Inspire Program 
//  Entry Point: 
fun004

No OpenMP transformation (ignoring OpenMP pragma):

let fun000 = fun(int<4> v2, ref<array<ref<array<char,1>>,1>> v3) -> int<4> {
    decl ref<vector<real<8>,10>> v4 = ( var(undefined(type<vector<real<8>,10>>)));
    decl ref<int<4>> v54 = ( var(undefined(type<int<4>>)));
    for(decl int<4> v64 = 0 .. 10 : 1) {
        ((ref_vector_to_ref_array(v4)&[int_to_uint(v64, 4)]) := 0.0);
    };
    (v54 := 10);
    return 0;
};

// Inspire Program 
//  Entry Point: 
fun000

Attachments (1)

Download all attachments as: .zip

Note: See TracWiki for help on using the wiki.