Changes between Version 69 and Version 70 of Next-GenOpenMPTransformation


Ignore:
Timestamp:
03/15/21 19:50:06 (5 years ago)
Author:
wuwenhao
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Next-GenOpenMPTransformation

    v69 v70  
    10102. At a left mover (e.g., unlock, exit_critical), we do check and then clean (pop).
    1111    (Note that it only clean whats in between a pair of right mover and left mover.)
    12 3. A barrier is transformed as: barrier() ; check(); clean_all(); barrier();
    13 4. In a $track{..} scope, both read and write operations of shared variables are tracked for checking data race.
    14     ($tracked_reads() and $tracked_writes() are functions returning a set containing all shared variables read or written.)
     123. A barrier is transformed as: barrier() ; $check_data_race(); $track_clean(); barrier();
     134. Read and write operations are tracked in $atomic scope and functions of tracking read/write operations are:
     14  - {{{$track{}}} . . . . . . . . . . . . . . . . creates a new pair of read/write sets for tracking.
     15  - {{{} // end of $track scope}}} . . removes read/write sets currently used for tracking.
     16  - {{{$track_empty();}}} . . . . . . . . . . empties read/write sets currently used for tracking.
     17  - {{{$tracked_reads();}}} . . . . . . . . returns a set of tracked shared variables read by its caller process.
     18  - {{{$tracked_writes();}}} . . . . . . . returns a set of tracked shared variables written by its caller process.
     195. {{{$check_data_race}}} asserts that:
     20{{{
     21  $forall (int i, j: 0 .. nthreads - 1) (i != j) ==>
     22    $mem_disjoint(
     23      writes[i],
     24      $mem_union(reads[j], writes[j])
     25    );
     26}}}
    1527
    1628E.g.,
     
    3749  $depends_on(/*nothing*/)$atomic{
    3850    $omp_team _omp_team = $omp_team_create($here, _omp_gteam, _omp_tid);
    39     $track{ // RS stack: rs0; WS stack: ws0;
     51    $track{ // RS stack: rs0:={}; WS stack: ws0:={};
    4052      // Enter parallel region
    4153      A;
    4254      $yield();
    43       $track{ // RS stack: rs0, rs1; WS stack: ws0, ws1;
    44         $when(_omp_critical_c->value == 0);
    45         $track{ // Ignore race on lock
    46            _omp_critical_c->value = 1; // Enter critical block
    47         }
    48         B;
    49         $track{ // Ignore race on lock
    50            _omp_critical_c->value = 0; // Exit critical block
    51         }
    52         $check_data_race(); // 1st check
    53       } // RS stack: rs0; WS stack: ws0; empty sets rs1, ws1;
     55      $when(_omp_critical_c->value == 0);
     56      $track{ // Ignore race on lock
     57         _omp_critical_c->value = 1; // Enter critical block
     58      }
     59      B;
     60      $track{ // Ignore race on lock
     61         _omp_critical_c->value = 0; // Exit critical block
     62      }
     63      // RS stack: rs0:={A, B}; WS stack: ws0:={A, B};
     64      $check_data_race(); // 1st check
     65      $track_clean();
     66      // RS stack: rs0:={}; WS stack: ws0:={};
    5467      C;
    5568      $check_data_race(); // 2nd check