Changes between Version 72 and Version 73 of Next-GenOpenMPTransformation
- Timestamp:
- 03/31/21 09:56:27 (5 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Next-GenOpenMPTransformation
v72 v73 48 48 $mem_disjoint(...) 49 49 ); 50 rs[tid] = $mem_empty(); 51 ws[tid] = $mem_empty(); 50 52 } 51 53 }}} 52 54 {{{ 53 55 // Init parallel region env. 54 $range _omp_thread_range = 0 .. _omp_nthreads - 1; 55 $domain(1) _omp_dom = ($domain){_omp_thread_range}; 56 $omp_gteam _omp_gteam = $omp_gteam_create($here, _omp_nthreads); 57 $mem rs[_omp_nthreads], ws[_omp_nthreads]; 58 for(..) { 59 ws[i] = empty; 60 rs[i] = empty; 61 } 62 $for (int _omp_tid: _omp_dom) { 56 $range thread_range = 0 .. nthreads - 1; 57 $domain(1) dom = ($domain){thread_range}; 58 $omp_gteam gteam = $omp_gteam_create($here, nthreads); 59 $mem rs[nthreads], ws[nthreads]; // read sets and write sets. 60 for(int i=0; i<nthreads; i++) { 61 ws[i] = $mem_empty(); 62 rs[i] = $mem_empty(); 63 } 64 65 // Transformed parallel region 66 $for (int tid: dom) { 63 67 $depends_on(/*nothing*/)$atomic{ 64 $omp_team _omp_team = $omp_team_create($here, _omp_gteam, _omp_tid);68 $omp_team team = $omp_team_create($here, gteam, tid); 65 69 $track{ // RS stack: rs0:={}; WS stack: ws0:={}; 66 70 // Enter parallel region 67 71 A; 68 72 $yield(); 69 $when( _omp_critical_c->value == 0);73 $when(critical_c->value == 0); 70 74 $track{ // Ignore race on lock 71 _omp_critical_c->value = 1; // Enter critical block75 critical_c->value = 1; // Enter critical block 72 76 } 73 77 B; 74 78 $track{ // Ignore race on lock 75 _omp_critical_c->value = 0; // Exit critical block79 critical_c->value = 0; // Exit critical block 76 80 } 77 81 // RS stack: rs0:={A, B}; WS stack: ws0:={A, B}; 78 82 $check_data_race(&rs, &ws, nthreads, tid); // 1st check 79 83 $track_clean(); 80 rs[tid] = $mem_empty();81 ws[tid] = $mem_empty();82 84 // RS stack: rs0:={}; WS stack: ws0:={}; 83 85 C;
