Changes between Version 4 and Version 5 of OpenMP-Transformation-Introduction


Ignore:
Timestamp:
07/10/22 02:59:12 (4 years ago)
Author:
wuwenhao
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • OpenMP-Transformation-Introduction

    v4 v5  
    6464$domain(1) dom = ($domain){thread_range};
    6565$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.
    6767for(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();
    7070}
    7171
     
    7474  $depends_on(/*nothing*/)$atomic{
    7575    $omp_team team = $omp_team_create($here, gteam, tid);
    76     $track{ // RS stack: rs0:={}; WS stack: ws0:={};
     76    $track{
    7777      // Enter parallel region
     78// local memset stacks: rs:={{}}; ws:={{}};
    7879      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};
    7983      $yield();
     84// local memset stacks: rs:={{A}, {}}; ws:={{A}, {}};
     85
    8086      $when(critical_c->value == 0);
    8187      $track{ // Ignore race on lock
     
    8389      }
    8490      B;
     91// local memset stacks: rs:={{A}, {B}}; ws:={{A}, {B}};
    8592      $track{ // Ignore race on lock
    8693         critical_c->value = 0; // Exit critical block
    8794      }
    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
    9098      $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
    94105      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};
    95109      $check_data_race(&rs, &ws, nthreads, tid); // 2nd check
    96110    } // RS stack: <empty>; WS stack: <empty>; empty sets rs0, ws0;