Changes between Version 4 and Version 5 of OpenMP-Transformation-Introduction
- Timestamp:
- 07/10/22 02:59:12 (4 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
OpenMP-Transformation-Introduction
v4 v5 64 64 $domain(1) dom = ($domain){thread_range}; 65 65 $omp_gteam gteam = $omp_gteam_create($here, nthreads); 66 $mem rs[nthreads], ws[nthreads]; // read sets and write sets.66 $mem RS[nthreads], WS[nthreads]; // global read/write sets for threads. 67 67 for(int i=0; i<nthreads; i++) { 68 ws[i] = $mem_empty();69 rs[i] = $mem_empty();68 WS[i] = $mem_empty(); 69 RS[i] = $mem_empty(); 70 70 } 71 71 … … 74 74 $depends_on(/*nothing*/)$atomic{ 75 75 $omp_team team = $omp_team_create($here, gteam, tid); 76 $track{ // RS stack: rs0:={}; WS stack: ws0:={};76 $track{ 77 77 // Enter parallel region 78 // local memset stacks: rs:={{}}; ws:={{}}; 78 79 A; 80 // local memset stacks: rs:={{A}}; ws:={{A}}; 81 // update global memsets RS[tid] and WS[tid] in $yield 82 // global memses: RS[tid]:={A}; WS[tid]:={A}; 79 83 $yield(); 84 // local memset stacks: rs:={{A}, {}}; ws:={{A}, {}}; 85 80 86 $when(critical_c->value == 0); 81 87 $track{ // Ignore race on lock … … 83 89 } 84 90 B; 91 // local memset stacks: rs:={{A}, {B}}; ws:={{A}, {B}}; 85 92 $track{ // Ignore race on lock 86 93 critical_c->value = 0; // Exit critical block 87 94 } 88 // RS stack: rs0:={A, B}; WS stack: ws0:={A, B}; 89 $check_data_race(&rs, &ws, nthreads, tid); // 1st check 95 // update global memsets RS[tid] and WS[tid] in $check_data_race 96 // global memses: RS[tid]:={A}U{B}; WS[tid]:={A}U{B}; 97 $check_data_race(&RS, &WS, nthreads, tid); // 1st check 90 98 $track_clean(); 91 rs[tid] = $mem_empty(); 92 ws[tid] = $mem_empty(); 93 // RS stack: rs0:={}; WS stack: ws0:={}; 99 // local memset stacks: rs:={}; ws:={}; 100 // update global memsets RS[tid] and WS[tid] in $yield 101 // global memses: RS[tid]:={}; WS[tid]:={}; 102 $yield(); 103 // local memset stacks: rs:={{}}; ws:={{}}; 104 94 105 C; 106 // local memset stacks: rs:={{C}}; ws:={{C}}; 107 // update global memsets RS[tid] and WS[tid] in $check_data_race 108 // global memses: RS[tid]:={C}; WS[tid]:={C}; 95 109 $check_data_race(&rs, &ws, nthreads, tid); // 2nd check 96 110 } // RS stack: <empty>; WS stack: <empty>; empty sets rs0, ws0;
