| | 1 | A simple OpenMP program |
| | 2 | {{{ |
| | 3 | #include <omp.h> |
| | 4 | #define N 10 |
| | 5 | |
| | 6 | int main (int argc, char * argv[]){ |
| | 7 | double a[N]; |
| | 8 | int i; |
| | 9 | |
| | 10 | #pragma omp parallel |
| | 11 | #pragma omp for |
| | 12 | for(i=0; i<N; i++) |
| | 13 | a[i] = 0; |
| | 14 | } |
| | 15 | }}} |
| | 16 | |
| | 17 | Insieme IR: |
| | 18 | {{{ |
| | 19 | let fun000 = fun(ref<vector<real<8>,10>> v87, int<4> v88, int<4> v89, int<4> v90) -> unit { |
| | 20 | for(decl int<4> v64 = v88 .. v89 : v90) { |
| | 21 | ((ref_vector_to_ref_array(v87)&[int_to_uint(v64, 4)]) := 0.0); |
| | 22 | }; |
| | 23 | }; |
| | 24 | |
| | 25 | let fun001 = fun(ref<array<int<4>,1>> v1, uint<8> v2, uint<8> v3) -> unit { |
| | 26 | return unit; |
| | 27 | }; |
| | 28 | |
| | 29 | let fun002 = fun(ref<vector<real<8>,10>> v103) -> unit { |
| | 30 | { |
| | 31 | pfor(getThreadGroup(0), 0, 10, 1, bind(v91, v92, v93){fun000(v103, v91, v92, v93)}); |
| | 32 | (barrier()); |
| | 33 | }; |
| | 34 | mergeAll(); |
| | 35 | }; |
| | 36 | |
| | 37 | let fun003 = fun(ref<int<4>> v105) -> unit { |
| | 38 | { |
| | 39 | (v105 := 10); |
| | 40 | }; |
| | 41 | mergeAll(); |
| | 42 | }; |
| | 43 | |
| | 44 | let fun004 = fun(int<4> v2, ref<array<ref<array<char,1>>,1>> v3) -> int<4> { |
| | 45 | decl ref<vector<real<8>,10>> v4 = ( var(undefined(type<vector<real<8>,10>>))); |
| | 46 | decl ref<int<4>> v54 = ( var(undefined(type<int<4>>))); |
| | 47 | { |
| | 48 | merge(parallel(job(([1-inf])){ |
| | 49 | bind(){fun002(v4)} |
| | 50 | })); |
| | 51 | }; |
| | 52 | merge(parallel(job(([1-inf])){ |
| | 53 | bind(){fun003(v54)} |
| | 54 | })); |
| | 55 | return 0; |
| | 56 | }; |
| | 57 | |
| | 58 | // Inspire Program |
| | 59 | // Entry Point: |
| | 60 | fun004 |
| | 61 | }}} |
| | 62 | |
| | 63 | No OpenMP transformation (ignoring OpenMP pragma): |
| | 64 | {{{ |
| | 65 | let fun000 = fun(int<4> v2, ref<array<ref<array<char,1>>,1>> v3) -> int<4> { |
| | 66 | decl ref<vector<real<8>,10>> v4 = ( var(undefined(type<vector<real<8>,10>>))); |
| | 67 | decl ref<int<4>> v54 = ( var(undefined(type<int<4>>))); |
| | 68 | for(decl int<4> v64 = 0 .. 10 : 1) { |
| | 69 | ((ref_vector_to_ref_array(v4)&[int_to_uint(v64, 4)]) := 0.0); |
| | 70 | }; |
| | 71 | (v54 := 10); |
| | 72 | return 0; |
| | 73 | }; |
| | 74 | |
| | 75 | // Inspire Program |
| | 76 | // Entry Point: |
| | 77 | fun000 |
| | 78 | }}} |