| Version 1 (modified by , 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)
-
for.png
(112.4 KB
) - added by 10 years ago.
control graph
Download all attachments as: .zip
Note:
See TracWiki
for help on using the wiki.
