Changes between Version 72 and Version 73 of Next-GenOpenMPTransformation


Ignore:
Timestamp:
03/31/21 09:56:27 (5 years ago)
Author:
wuwenhao
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Next-GenOpenMPTransformation

    v72 v73  
    4848      $mem_disjoint(...)
    4949  );
     50  rs[tid] = $mem_empty();
     51  ws[tid] = $mem_empty();
    5052}
    5153}}}
    5254{{{
    5355// 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.
     60for(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) {
    6367  $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);
    6569    $track{ // RS stack: rs0:={}; WS stack: ws0:={};
    6670      // Enter parallel region
    6771      A;
    6872      $yield();
    69       $when(_omp_critical_c->value == 0);
     73      $when(critical_c->value == 0);
    7074      $track{ // Ignore race on lock
    71          _omp_critical_c->value = 1; // Enter critical block
     75         critical_c->value = 1; // Enter critical block
    7276      }
    7377      B;
    7478      $track{ // Ignore race on lock
    75          _omp_critical_c->value = 0; // Exit critical block
     79         critical_c->value = 0; // Exit critical block
    7680      }
    7781      // RS stack: rs0:={A, B}; WS stack: ws0:={A, B};
    7882      $check_data_race(&rs, &ws, nthreads, tid); // 1st check
    7983      $track_clean();
    80       rs[tid] = $mem_empty();
    81       ws[tid] = $mem_empty();
    8284      // RS stack: rs0:={}; WS stack: ws0:={};
    8385      C;