source: CIVL/examples/omp/dataracebench-1.2.0/README.md@ 8abfd3a

1.23 2.0 main test-branch
Last change on this file since 8abfd3a was 86ee0b6, checked in by Ziqing Luo <ziqing@…>, 7 years ago

merged wenhao's branch for omp transformation

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

  • Property mode set to 100755
File size: 21.6 KB
Line 
1# DataRaceBench 1.2.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 some microbenchmarks use OpenMP 4.5 features. Those are:
10 DRB094-doall2-ordered-orig-no.c
11 DRB095-doall2-taskloop-orig-yes.c (requires gcc 7.x)
12 DRB096-doall2-taskloop-collapse-orig-no.c (requires gcc 7.x)
13 DRB100-task-reference-orig-no.cpp
14 DRB112-linear-orig-no.c
15You need a recent OpenMP compiler (e.g. gcc 7.x or later) to compile them.
16
17DataRaceBench also comes with an evaluation script
18(check-data-races.sh). The script can be used to evaluate the tools
19Helgrind, Archer, Thread Sanitizer, and Intel Inspector. In addition a
20parameterized test harness (scripts/test-harness.sh) is available
21which allows to provide a number of different parameters for the
22evaluation. The test harness is used by the evaluation script with
23some pre-defined values.
24
25## Latest tool evaluation results
26[Data race detection tool regression evaluation](https://github.com/LLNL/dataracebench/wiki/Regression-metrics)
27
28## Microbenchmark property labels (P-Labels)
29
30P-Label | Meaning (microbenchmarks with data races) | P-Label | Meaning (microbenchmarks without data races)
31------|-----------------------------------|------|------------------------------
32 Y1 | Unresolvable dependences | N1 | Embarrassingly parallel or single thread execution
33 Y2 | Missing data sharing clauses | N2 | Use of data sharing clauses
34 Y3 | Missing synchronization | N3 | Use of synchronization
35 Y4 | SIMD data races | N4 | Use of SIMD directives
36 Y5 | Accelerator data races | N5 | Use of accelerator directives
37 Y6 | Undefined behavior | N6 | Use of special language features
38 Y7 | Numerical kernel data races | N7 | Numerical kernels
39
40## Microbenchmarks with known data races (some have a varying length version)
41
42Microbenchmark |P-Label| Description | Source
43----------------------------------------------------|-------|------------------------------------------------------------------------------|----------
44DRB001-antidep1-orig-yes.c |Y1 | Anti-dependence within a single loop | AutoPar
45DRB002-antidep1-var-yes.c |Y1 | Anti-dependence within a single loop | AutoPar
46DRB003-antidep2-orig-yes.c |Y1 | Anti-dependence within a two-level loop nest | AutoPar
47DRB004-antidep2-var-yes.c |Y1 | Anti-dependence within a two-level loop nest | AutoPar
48DRB005-indirectaccess1-orig-yes.c |Y7 | Indirect access with overlapped index array elements | LLNL App
49DRB006-indirectaccess2-orig-yes.c |Y7 | Overlapping index array elements when 36 or more threads are used | LLNL App
50DRB007-indirectaccess3-orig-yes.c |Y7 | Overlapping index array elements when 60 or more threads are used | LLNL App
51DRB008-indirectaccess4-orig-yes.c |Y7 | Overlapping index array elements when 180 or more threads are used | LLNL App
52DRB009-lastprivatemissing-orig-yes.c |Y2 | Data race due to a missing `lastprivate()` clause | AutoPar
53DRB010-lastprivatemissing-var-yes.c |Y2 | Data race due to a missing `lastprivate()` clause | AutoPar
54DRB011-minusminus-orig-yes.c |Y3 | Unprotected decrement operation `--` | AutoPar
55DRB012-minusminus-var-yes.c |Y3 | Unprotected decrement operation `--` | AutoPar
56DRB013-nowait-orig-yes.c |Y3 | Missing barrier due to a wrongfully used nowait | AutoPar
57DRB014-outofbounds-orig-yes.c |Y6 | Out of bound access of the 2nd dimension of array | AutoPar
58DRB015-outofbounds-var-yes.c |Y6 | Out of bound access of the 2nd dimension of array | AutoPar
59DRB016-outputdep-orig-yes.c |Y1 | Output dependence and true dependence within a loop | AutoPar
60DRB017-outputdep-var-yes.c |Y1 | Output dependence and true dependence within a loop | AutoPar
61DRB018-plusplus-orig-yes.c |Y1 | increment operation `++` on array index variable | AutoPar
62DRB019-plusplus-var-yes.c |Y1 | increment operation `++` on array index variable | AutoPar
63DRB020-privatemissing-orig-yes.c |Y2 | Missing `private()` for a temp variable | AutoPar
64DRB021-privatemissing-var-yes.c |Y2 | Missing `private()` for a temp variable | AutoPar
65DRB022-reductionmissing-orig-yes.c |Y2 | Missing `reduction()` for a variable | AutoPar
66DRB023-reductionmissing-var-yes.c |Y2 | Missing `reduction()` for a variable | AutoPar
67DRB024-sections1-orig-yes.c |Y3 | Unprotected data writes in parallel sections | New
68DRB025-simdtruedep-orig-yes.c |Y1,Y4 | SIMD instruction level data races | New
69DRB026-simdtruedep-var-yes.c |Y1,Y4 | SIMD instruction level data races | New
70DRB027-targetparallelfor-orig-yes.c |Y1,Y5 | Data races in loops offloaded to accelerators | New
71DRB028-taskdependmissing-orig-yes.c |Y3 | Unprotected data writes in two tasks | New
72DRB029-truedep1-orig-yes.c |Y1 | True data dependence among multiple array elements within a single level loop| AutoPar
73DRB030-truedep1-var-yes.c |Y1 | True data dependence among multiple array elements within a single level loop| AutoPar
74DRB031-truedepfirstdimension-(orig&#124;var)-yes.c |Y1 | True data dependence of first dimension for a 2-D array accesses | AutoPar
75DRB032-truedepfirstdimension-(orig&#124;var)-yes.c |Y1 | True data dependence of first dimension for a 2-D array accesses | AutoPar
76DRB033-truedeplinear-orig-yes.c |Y1 | Linear equation as array subscript | AutoPar
77DRB034-truedeplinear-var-yes.c |Y1 | Linear equation as array subscript | AutoPar
78DRB035-truedepscalar-orig-yes.c |Y1 | True data dependence due to scalar | AutoPar
79DRB036-truedepscalar-var-yes.c |Y1 | True data dependence due to scalar | AutoPar
80DRB037-truedepseconddimension-(orig&#124;var)-yes.c |Y1 | True data dependence on 2nd dimension of a 2-D array accesses | AutoPar
81DRB038-truedepseconddimension-(orig&#124;var)-yes.c |Y1 | True data dependence on 2nd dimension of a 2-D array accesses | AutoPar
82DRB039-truedepsingleelement-(orig&#124;var)-yes.c |Y1 | True data dependence due to a single array element | AutoPar
83DRB040-truedepsingleelement-(orig&#124;var)-yes.c |Y1 | True data dependence due to a single array element | AutoPar
84DRB073-doall2-orig-yes.c |Y2 | Missing `private()` for inner loop nest's loop index variable | New
85DRB074-flush-orig-yes.c |Y2 | Reduction using a shared variable, extracted from an official OpenMP example | New
86DRB075-getthreadnum-orig-yes.c |Y1 | Work sharing within one branch of a `if` statement | New
87DRB080-func-arg-orig-yes.c |Y6 | Function arguments passed by reference, inheriting shared attribute | New
88DRB082-declared-in-func-orig-yes.c |Y6 | A variable declared within a function called by a parallel region | New
89DRB084-threadprivatemissing-orig-yes.c |Y2 | Missing threadprivate for a global var, not referenced within a construct | New
90DRB086-static-data-member-orig-yes.cpp |Y2 | Missing threadprivate for a static member, not referenced within a construct | New
91DRB087-static-data-member2-orig-yes.cpp |Y2 | Missing threadprivate for a static member, referenced within a construct | New
92DRB088-dynamic-storage-orig-yes.c |Y2 | Data race for a dynamica storage variable, not referenced within a construct | New
93DRB089-dynamic-storage2-orig-yes.c |Y2 | Data race for a dynamica storage variable, referenced within a construct | New
94DRB090-static-local-orig-yes.c |Y2 | Data race for a locally declared static variable | New
95DRB092-threadprivatemissing2-orig-yes.c |Y2 | Missing threadprivate for a variable referenced within a construct | New
96DRB095-doall2-taskloop-orig-yes.c |Y2 | Missing protection for inner loop's loop variable | New
97DRB106-taskwaitmissing-orig-yes.c |Y3 | Missing taskwait to ensure correct order of calculations | New
98DRB109-orderedmissing-orig-yes.c |Y3 | Missing the ordered clause, causing data races | New
99DRB111-linearmissing-orig-yes.c |Y2 | Missing linear for a shared variable, causing data races | New
100DRB114-if-orig-yes.c |Y1 | True data dependence within a single level loop, with if() clause | New
101DRB115-forsimd-orig-yes.c |Y1,Y4 | Both thread and instruction level data races due to omp loop simd | New
102DRB116-target-teams-orig-yes.c |Y3 | Master threads of two teams do not have synchronization, causing data races | New
103
104## Microbenchmarks without known data races
105
106Microbenchmark |P-Label| Description | Source
107-----------------------------------------|-------|--------------------------------------------------------------------------------------|------------
108DRB041-3mm-parallel-no.c |N2 | 3-step matrix-matrix multiplication, non-optimized version | Polyhedral
109DRB042-3mm-tile-no.c |N2,N4 | 3-step matrix-matrix multiplication, with tiling and nested SIMD | Polyhedral
110DRB043-adi-parallel-no.c |N2 | Alternating Direction Implicit solver, non-optimized version | Polyhedral
111DRB044-adi-tile-no.c |N2,N4 | Alternating Direction Implicit solver, with tiling and nested SIMD | Polyhedral
112DRB045-doall1-orig-no.c |N1 | Classic DOAll loop operating on a one dimensional array | AutoPar
113DRB046-doall2-orig-no.c |N1 | Classic DOAll loop operating on a two dimensional array | AutoPar
114DRB047-doallchar-orig-no.c |N1 | Classic DOALL loop operating on a character array | New
115DRB048-firstprivate-orig-no.c |N2 | Example use of firstprivate | AutoPar
116DRB049-fprintf-orig-no.c |N6 | Use of `fprintf()` | New
117DRB050-functionparameter-orig-no.c |N6 | Arrays passed as function parameters | LLNL App
118DRB051-getthreadnum-orig-no.c |N2 | single thread execution using `if (omp_get_thread_num()==0)` | New
119DRB052-indirectaccesssharebase-orig-no.c |N7 | Indirect array accesses using index arrays without overlapping | LLNL App
120DRB053-inneronly1-orig-no.c |N1 | Two-level nested loops, inner level is parallelizable. Anti dependence on outer level| AutoPar
121DRB054-inneronly2-orig-no.c |N1 | Two-level nested loops, inner level is parallelizable. True dependence on outer level| AutoPar
122DRB055-jacobi2d-parallel-no.c |N7 | Jacobi with array copying, no reduction, non-optimized version | Polyhedral
123DRB056-jacobi2d-tile-no.c |N4,N7 | Jacobi with array copying, no reduction, with tiling and nested SIMD | Polyhedral
124DRB057-jacobiinitialize-orig-no.c |N7 | The array initialization parallel loop in Jacobi | AutoPar
125DRB058-jacobikernel-orig-no.c |N7 | Parallel Jacobi stencil computation kernel with array copying and reduction | AutoPar
126DRB059-lastprivate-orig-no.c |N2 | Example use of lastprivate | AutoPar
127DRB060-matrixmultiply-orig-no.c |N7 | Classic i-k-j order matrix multiplication using OpenMP | AutoPar
128DRB061-matrixvector1-orig-no.c |N7 | Matrix-vector multiplication parallelized at the outer level loop | AutoPar
129DRB062-matrixvector2-orig-no.c |N7 | Matrix-vector multiplication parallelized at the inner level loop with reduction | AutoPar
130DRB063-outeronly1-orig-no.c |N2 | Two-level nested loops, outer level is parallelizable. Anti dependence on inner level| AutoPar
131DRB064-outeronly2-orig-no.c |N2 | Two-level nested loops, outer level is parallelizable. True dependence on inner level| AutoPar
132DRB065-pireduction-orig-no.c |N7 | PI calculation using reduction | AutoPar
133DRB066-pointernoaliasing-orig-no.c |N6 | Pointers assigned by different malloc calls, without aliasing | LLNL App
134DRB067-restrictpointer1-orig-no.c |N6 | C99 restrict pointers used for array initialization, no aliasing | LLNL App
135DRB068-restrictpointer2-orig-no.c |N6 | C99 restrict pointers used for array computation, no aliasing | LLNL App
136DRB069-sectionslock1-orig-no.c |N3 | OpenMP parallel sections with a lock to protect shared data writes | New
137DRB070-simd1-orig-no.c |N1,N4 | OpenMP SIMD directive to indicate vectorization of a loop | New
138DRB071-targetparallelfor-orig-no.c |N1,N5 | No data races in loops offloaded to accelerators | New
139DRB072-taskdep1-orig-no.c |N3 | OpenMP task with depend clauses to avoid data races | New
140DRB076-flush-orig-no.c |N2 | OpenMP private clause to avoid data races | New
141DRB077-single-orig-no.c |N1 | OpenMP single directive to use only one thread for execution | New
142DRB078-taskdep2-orig-no.c |N3 | OpenMP task depend clause to avoid data races | New
143DRB079-taskdep3-orig-no.c |N3 | OpenMP task depend clause to avoid data races | New
144DRB081-func-arg-orig-no.c |N6 | Function arguments passed by value, private | New
145DRB083-declared-in-func-orig-no.c |N6 | A variable declared within a function called by a parallel region | New
146DRB085-threadprivate-orig-no.c |N2 | Use threadprivate to protect a file scope variable, not referenced within a construct| New
147DRB091-threadprivate2-orig-no.c |N2 | Use threadprivate to protect a file scope variable, referenced within a construct | New
148DRB093-doall2-collapse-orig-no.c |N2 | Use collapse(n) to control the number of associated loops of omp for | New
149DRB094-doall2-ordered-orig-no.c |N2 | Use ordered(n) to control the number of associated loops of omp for | New
150DRB096-doall2-taskloop-collapse-orig-no.c|N2 | Use ordered(n) to control the number of associated loops of taskloop | New
151DRB097-target-teams-distribute-orig-no.c |N2 | Predetermined attribute rule for loop variable associated with distribute | New
152DRB098-simd2-orig-no.c |N1,N2 | OpenMP SIMD directive to indicate vectorization of two nested loops | New
153DRB099-targetparallelfor2-orig-no.c |N1,N5 | Loops offloaded to accelerators: array sections derived from pointer | New
154DRB100-task-reference-orig-no.cpp |N1 | OpenMP 4.5 feature: orphaned task generating construct using pass-by-reference | New
155DRB101-task-value-orig-no.cpp |N1 | In a task generating construct, a variable without applicable rules is firstprivate | New
156DRB102-copyprivate-orig-no.c |N2 | threadprivate+copyprivate, a variable without applicable rules is firstprivate | New
157DRB103-master-orig-no.c |N1 | master directive to ensure only one thread will execute data accesses | New
158DRB104-nowait-barrier-orig-no.c |N3 | Use barrier to ensure correct order of initialization and assignment phases | New
159DRB105-taskwait-orig-no.c |N3 | Use taskwait to ensure correct order of tasks | New
160DRB107-taskgroup-orig-no.c |N3 | Use taskgroup to ensure correct order of tasks | New
161DRB108-atomic-orig-no.c |N3 | Use atomic to protect shared accesses to a variable | New
162DRB110-ordered-orig-no.c |N3 | Proper use of the ordered clause to avoid data races | New
163DRB112-linear-orig-no.c |N2 | Use linear to privatize a variable | New
164DRB113-default-orig-no.c |N1 | default(none) to enforce explicitly listing variables in data-sharing clauses | New
165
166## Authors
167
168DataRaceBench was created by Chunhua Liao, Pei-Hung Lin, Joshua Asplund, Markus Schordan, and Ian Karlin.
169
170## Release
171
172DataRaceBench is released under a BSD license. For more details see
173the file LICENSE.txt. The microbenchmarks marked 'Polyhedral' in above
174table were generated as optimization variants of benchmarks from the
175PolyOpt benchmark suite. For those benchmarks see the license file
176LICENSE.OSU.txt.
177
178`LLNL-CODE-732144`
179
180## How to cite DataRaceBench in a publication
181
182If you are referring to DataRaceBench in a publication, please cite the following paper:
183
184* Chunhua Liao, Pei-Hung Lin, Joshua Asplund, Markus Schordan, Ian Karlin.
185[DataRaceBench: A Benchmark Suite for Systematic Evaluation of Data Race Detection Tools (best paper finalist)](https://dl.acm.org/citation.cfm?doid=3126908.3126958).
186Proceedings of the International Conference for High Performance Computing, Networking, Storage and Analysis, SC 2017, pp. 11:1-11:14, ISBN 978-1-4503-5114-0, Denver, CO, USA, November 12-17, 2017.
187
188If you use DataRaceBench v.1.2.0 or later, please additionally cite the following paper discussing coverage analysis and improvements of the benchmark suite:
189
190* Chunhua Liao, Pei-Hung Lin, Markus Schordan and Ian Karlin, [A Semantics-Driven Approach to Improving DataRaceBench's OpenMP Standard Coverage](https://www.springerprofessional.de/en/a-semantics-driven-approach-to-improving-dataracebench-s-openmp-/16134302), IWOMP 2018: 14th International Workshop on OpenMP, Barcelona, Spain, September 26-28, 2018
191
192Other papers
193* Pei-Hung Lin, Chunhua Liao, Markus Schordan, Ian Karlin. [Runtime and Memory Evaluation of Data Race Detection Tools](https://link.springer.com/chapter/10.1007/978-3-030-03421-4_13). ISoLA (2) 2018: 179-196.
194* Pei-Hung Lin, Chunhua Liao, Markus Schordan, Ian Karlin. Exploring Regression of Data Race Detection Tools Using DataRaceBench. To
195appear in Proceedings of the Third International Workshop on Software Correctness for HPC Applications (CORRECTNESS@SC 2019).
Note: See TracBrowser for help on using the repository browser.