source: CIVL/examples/omp/dataracebench-1.0.0/README.md@ bd6628e

1.23 2.0 main test-branch
Last change on this file since bd6628e was a1acb0c5, checked in by Ziqing Luo <ziqing@…>, 9 years ago

Add the released version of DataRaceBench v1.0.0

git-svn-id: svn://vsl.cis.udel.edu/civl/trunk@4394 fb995dde-84ed-4084-dfe6-e5aef3e2452c

  • Property mode set to 100644
File size: 11.2 KB
Line 
1# DataRaceBench 1.0.0
2
3DataRaceBench is a benchmark suite designed to systematically and
4quantitatively evaluate the effectiveness of data race detection
5tools. It includes a set of microbenchmarks with and without data
6races. Parallelism is represented by OpenMP directives. OpenMP is a
7popular parallel programming model for multi-threaded applications.
8
9Note that if you are using gcc for compiling the microbenchmarks, at
10least version 4.9 is required to have support for all used OpenMP
11directives.
12
13DataRaceBench also comes with an evaluation script
14(check-data-races.sh). The script can be used to evaluate the tools
15Helgrind, Archer, Thread Sanitizer, and Intel Inspector. In addition a
16parameterized test harness (scripts/test-harness.sh) is available
17which allows to provide a number of different parameters for the
18evaluation. The test harness is used by the evaluation script with
19some pre-defined values.
20
21## Microbenchmark property labels (P-Labels)
22
23P-Label | Meaning (microbenchmarks with data races) | P-Label | Meaning (microbenchmarks without data races)
24------|-----------------------------------|------|------------------------------
25 Y1 | Unresolvable dependences | N1 | Embarrassingly parallel
26 Y2 | Missing data sharing clauses | N2 | Use of data sharing clauses
27 Y3 | Missing synchronization | N3 | Use of synchronization
28 Y4 | SIMD data races | N4 | Use of SIMD directives
29 Y5 | Accelerator data races | N5 | Use of accelerator directives
30 Y6 | Undefined behavior | N6 | Use of special language features
31 Y7 | Numerical kernel data races | N7 | Numerical kernels
32
33
34## Microbenchmarks with known data races (some have a varying length version)
35
36ID | Microbenchmark |P-Label| Description | Source
37----------|-----------------------------------------------|-------|------------------------------------------------------------------------------|----------
381&#124;2 | antidep1-(orig&#124;var)-yes.c |Y1 | Anti-dependence within a single loop | AutoPar
393&#124;4 | antidep2-(orig&#124;var)-yes.c |Y1 | Anti-dependence within a two-level loop nest | AutoPar
405 | indirectaccess1-orig-yes.c |Y7 | Indirect access with overlapped index array elements | LLNL App
416 | indirectaccess2-orig-yes.c |Y7 | Overlapping index array elements when 36 or more threads are used | LLNL App
427 | indirectaccess3-orig-yes.c |Y7 | Overlapping index array elements when 60 or more threads are used | LLNL App
438 | indirectaccess4-orig-yes.c |Y7 | Overlapping index array elements when 180 or more threads are used | LLNL App
449&#124;10 | lastprivatemissing-(orig&#124;var)-yes.c |Y2 | Data race due to a missing `lastprivate()` clause | AutoPar
4511&#124;12| minusminus-(orig&#124;var)-yes.c |Y3 | Unprotected decrement operation `--` | AutoPar
4613 | nowait-orig-yes.c |Y3 | Missing barrier due to a wrongfully used nowait | AutoPar
4714&#124;15| outofbounds-(orig&#124;var)-yes.c |Y6 | Out of bound access of the 2nd dimension of array | AutoPar
4816&#124;17| outputdep-(orig&#124;var)-yes.c |Y1 | Output dependence and true dependence within a loop | AutoPar
4918&#124;19| plusplus-(orig&#124;var)-yes.c |Y1 | increment operation `++` on array index variable | AutoPar
5020&#124;21| privatemissing-(orig&#124;var)-yes.c |Y2 | Missing `private()` for a temp variable | AutoPar
5122&#124;23| reductionmissing-(orig&#124;var)-yes.c |Y2 | Missing `reduction()` for a variable | AutoPar
5224 | sections1-orig-yes.c |Y3 | Unprotected data writes in parallel sections | New
5325&#124;26| simdtruedep-(orig&#124;var)-yes.c |Y1,Y4 | SIMD instruction level data races | New
5427 | targetparallelfor-orig-yes.c |Y1,Y5 | Data races in loops offloaded to accelerators | New
5528 | taskdependmissing-orig-yes.c |Y3 | Unprotected data writes in two tasks | New
5629&#124;30| truedep1-(orig&#124;var)-yes.c |Y1 | True data dependence among multiple array elements within a single level loop| AutoPar
5731&#124;32| truedepfirstdimension-(orig&#124;var)-yes.c |Y1 | True data dependence of first dimension for a 2-D array accesses | AutoPar
5833&#124;34| truedeplinear-(orig&#124;var)-yes.c |Y1 | Linear equation as array subscript | AutoPar
5935&#124;36| truedepscalar-(orig&#124;var)-yes.c |Y1 | True data dependence due to scalar | AutoPar
6037&#124;38| truedepseconddimension-(orig&#124;var)-yes.c |Y1 | True data dependence on 2nd dimension of a 2-D array accesses | AutoPar
6139&#124;40| truedepsingleelement-(orig&#124;var)-yes.c |Y1 | True data dependence due to a single array element | AutoPar
62
63
64## Microbenchmarks without known data races
65
66ID| Microbenchmark |P-Label| Description | Source
67--|-----------------------------------|-------|--------------------------------------------------------------------------------------|------------
6841| 3mm-parallel-no.c |N2 | 3-step matrix-matrix multiplication, non-optimized version | Polyhedral
6942| 3mm-tile-no.c |N2,N4 | 3-step matrix-matrix multiplication, with tiling and nested SIMD | Polyhedral
7043| adi-parallel-no.c |N2 | Alternating Direction Implicit solver, non-optimized version | Polyhedral
7144| adi-tile-no.c |N2,N4 | Alternating Direction Implicit solver, with tiling and nested SIMD | Polyhedral
7245| doall1-orig-no.c |N1 | Classic DOAll loop operating on a one dimensional array | AutoPar
7346| doall2-orig-no.c |N1 | Classic DOAll loop operating on a two dimensional array | AutoPar
7447| doallchar-orig-no.c |N1 | Classic DOALL loop operating on a character array | New
7548| firstprivate-orig-no.c |N2 | Example use of firstprivate | AutoPar
7649| functionparameter-orig-no.c |N6 | Arrays passed as function parameters | LLNL App
7750| fprintf-orig-no.c |N6 | Use of `fprintf()` | New
7851| getthreadnum-orig-no.c |N2 | single thread execution using `if (omp_get_thread_num()==0)` | New
7952| indirectaccesssharebase-orig-no.c |N7 | Indirect array accesses using index arrays without overlapping | LLNL App
8053| inneronly1-orig-no.c |N1 | Two-level nested loops, inner level is parallelizable. True dependence on outer level| AutoPar
8154| inneronly2-orig-no.c |N1 | Two-level nested loops, inner level is parallelizable. Anti dependence on outer level| AutoPar
8255| jacobi2d-parallel-no.c |N7 | Jacobi with array copying, no reduction, non-optimized version | Polyhedral
8356| jacobi2d-tile-no.c |N4,N7 | Jacobi with array copying, no reduction, with tiling and nested SIMD | Polyhedral
8457| jacobiinitialize-orig-no.c |N7 | The array initialization parallel loop in Jacobi | AutoPar
8558| jacobikernel-orig-no.c |N7 | Parallel Jacobi stencil computation kernel with array copying and reduction | AutoPar
8659| lastprivate-orig-no.c |N2 | Example use of lastprivate | AutoPar
8760| matrixmultiply-orig-no.c |N7 | Classic i-k-j order matrix multiplication using OpenMP | AutoPar
8861| matrixvector1-orig-no.c |N7 | Matrix-vector multiplication parallelized at the outer level loop | AutoPar
8962| matrixvector2-orig-no.c |N7 | Matrix-vector multiplication parallelized at the inner level loop with reduction | AutoPar
9063| outeronly1-orig-no.c |N2 | Two-level nested loops, outer level is parallelizable. True dependence on inner level| AutoPar
9164| outeronly2-orig-no.c |N2 | Two-level nested loops, outer level is parallelizable. Anti dependence on inner level| AutoPar
9265| pireduction-orig-no.c |N7 | PI calculation using reduction | AutoPar
9366| pointernoaliasing-orig-no.c |N6 | Pointers assigned by different malloc calls, without aliasing | LLNL App
9467| restrictpointer1-orig-no.c |N6 | C99 restrict pointers used for array initialization, no aliasing | LLNL App
9568| restrictpointer2-orig-no.c |N6 | C99 restrict pointers used for array computation, no aliasing | LLNL App
9669| sectionslock1-orig-no.c |N3 | OpenMP parallel sections with a lock to protect shared data writes | New
9770| simd1-orig-no.c |N1,N4 | OpenMP SIMD directive to indicate vectorization of a loop | New
9871| targetparallelfor-orig-no.c |N1,N5 | data races in loops offloaded to accelerators | New
9972| taskdep1-orig-no.c |N3 | OpenMP task with depend clauses to avoid data races | New
100
101## Authors
102
103DataRaceBench was created by Chunhua Liao, Pei-Hung Lin, Joshua Asplund, Markus Schordan, and Ian Karlin.
104
105## Release
106
107DataRaceBench is released under a BSD license. For more details see
108the file LICENSE.txt. The microbenchmarks marked 'Polyhedral' in above
109table were generated as optimization variants of benchmarks from the
110PolyOpt benchmark suite. For those benchmarks see the license file
111LICENSE.OSU.txt.
112
113`LLNL-CODE-732144`
Note: See TracBrowser for help on using the repository browser.