Microbenchmark property labels (P-Labels)

July 7, 2023 · View on GitHub

P-LabelMeaning (microbenchmarks with data races)P-LabelMeaning (microbenchmarks without data races)
Y1Unresolvable dependenciesN1Embarrassingly parallel or single thread execution
Y2Missing data sharing clausesN2Use of data sharing clauses
Y3Missing synchronizationN3Use of synchronization
Y4SIMD data racesN4Use of SIMD directives
Y5Accelerator data racesN5Use of accelerator directives
Y6Undefined behaviorN6Use of special language features
Y7Numerical kernel data racesN7Numerical kernels

Microbenchmarks with known data races (some have a varying length version)

MicrobenchmarkP-LabelDescriptionSource
DRB001-antidep1-orig-yes.cY1Anti-dependence within a single loopAutoPar
DRB002-antidep1-var-yes.cY1Anti-dependence within a single loopAutoPar
DRB003-antidep2-orig-yes.cY1Anti-dependence within a two-level loop nestAutoPar
DRB004-antidep2-var-yes.cY1Anti-dependence within a two-level loop nestAutoPar
DRB005-indirectaccess1-orig-yes.cY7Indirect access with overlapped index array elementsLLNL App
DRB006-indirectaccess2-orig-yes.cY7Overlapping index array elements when 36 or more threads are usedLLNL App
DRB007-indirectaccess3-orig-yes.cY7Overlapping index array elements when 60 or more threads are usedLLNL App
DRB008-indirectaccess4-orig-yes.cY7Overlapping index array elements when 180 or more threads are usedLLNL App
DRB009-lastprivatemissing-orig-yes.cY2Data race due to a missing lastprivate() clauseAutoPar
DRB010-lastprivatemissing-var-yes.cY2Data race due to a missing lastprivate() clauseAutoPar
DRB011-minusminus-orig-yes.cY3Unprotected decrement operation --AutoPar
DRB012-minusminus-var-yes.cY3Unprotected decrement operation --AutoPar
DRB013-nowait-orig-yes.cY3Missing barrier due to a wrongfully used nowaitAutoPar
DRB014-outofbounds-orig-yes.cY6Out of bound access of the 2nd dimension of arrayAutoPar
DRB015-outofbounds-var-yes.cY6Out of bound access of the 2nd dimension of arrayAutoPar
DRB016-outputdep-orig-yes.cY1Output dependence and true dependence within a loopAutoPar
DRB017-outputdep-var-yes.cY1Output dependence and true dependence within a loopAutoPar
DRB018-plusplus-orig-yes.cY1increment operation ++ on array index variableAutoPar
DRB019-plusplus-var-yes.cY1increment operation ++ on array index variableAutoPar
DRB020-privatemissing-orig-yes.cY2Missing private() for a temp variableAutoPar
DRB021-privatemissing-var-yes.cY2Missing private() for a temp variableAutoPar
DRB022-reductionmissing-orig-yes.cY2Missing reduction() for a variableAutoPar
DRB023-reductionmissing-var-yes.cY2Missing reduction() for a variableAutoPar
DRB024-sections1-orig-yes.cY3Unprotected data writes in parallel sectionsNew
DRB025-simdtruedep-orig-yes.cY1,Y4SIMD instruction level data racesNew
DRB026-simdtruedep-var-yes.cY1,Y4SIMD instruction level data racesNew
DRB027-targetparallelfor-orig-yes.cY1,Y5Data races in loops offloaded to acceleratorsNew
DRB028-taskdependmissing-orig-yes.cY3Unprotected data writes in two tasksNew
DRB029-truedep1-orig-yes.cY1True data dependence among multiple array elements within a single level loopAutoPar
DRB030-truedep1-var-yes.cY1True data dependence among multiple array elements within a single level loopAutoPar
DRB031-truedepfirstdimension-(orig|var)-yes.cY1True data dependence of first dimension for a 2-D array accessesAutoPar
DRB032-truedepfirstdimension-(orig|var)-yes.cY1True data dependence of first dimension for a 2-D array accessesAutoPar
DRB033-truedeplinear-orig-yes.cY1Linear equation as array subscriptAutoPar
DRB034-truedeplinear-var-yes.cY1Linear equation as array subscriptAutoPar
DRB035-truedepscalar-orig-yes.cY1True data dependence due to scalarAutoPar
DRB036-truedepscalar-var-yes.cY1True data dependence due to scalarAutoPar
DRB037-truedepseconddimension-(orig|var)-yes.cY1True data dependence on 2nd dimension of a 2-D array accessesAutoPar
DRB038-truedepseconddimension-(orig|var)-yes.cY1True data dependence on 2nd dimension of a 2-D array accessesAutoPar
DRB039-truedepsingleelement-(orig|var)-yes.cY1True data dependence due to a single array elementAutoPar
DRB040-truedepsingleelement-(orig|var)-yes.cY1True data dependence due to a single array elementAutoPar
DRB073-doall2-orig-yes.cY2Missing private() for inner loop nest's loop index variableNew
DRB074-flush-orig-yes.cY2Reduction using a shared variable, extracted from an official OpenMP exampleNew
DRB075-getthreadnum-orig-yes.cY1Work sharing within one branch of a if statementNew
DRB080-func-arg-orig-yes.cY6Function arguments passed by reference, inheriting shared attributeNew
DRB082-declared-in-func-orig-yes.cY6A variable declared within a function called by a parallel regionNew
DRB084-threadprivatemissing-orig-yes.cY2Missing threadprivate for a global var, not referenced within a constructNew
DRB086-static-data-member-orig-yes.cppY2Missing threadprivate for a static member, not referenced within a constructNew
DRB087-static-data-member2-orig-yes.cppY2Missing threadprivate for a static member, referenced within a constructNew
DRB088-dynamic-storage-orig-yes.cY2Data race for a dynamica storage variable, not referenced within a constructNew
DRB089-dynamic-storage2-orig-yes.cY2Data race for a dynamica storage variable, referenced within a constructNew
DRB090-static-local-orig-yes.cY2Data race for a locally declared static variableNew
DRB092-threadprivatemissing2-orig-yes.cY2Missing threadprivate for a variable referenced within a constructNew
DRB095-doall2-taskloop-orig-yes.cY2Missing protection for inner loop's loop variableNew
DRB106-taskwaitmissing-orig-yes.cY3Missing taskwait to ensure correct order of calculationsNew
DRB109-orderedmissing-orig-yes.cY3Missing the ordered clause, causing data racesNew
DRB111-linearmissing-orig-yes.cY2Missing linear for a shared variable, causing data racesNew
DRB114-if-orig-yes.cY1True data dependence within a single level loop, with if() clauseNew
DRB115-forsimd-orig-yes.cY1,Y4Both thread and instruction level data races due to omp loop simdNew
DRB116-target-teams-orig-yes.cY3Master threads of two teams do not have synchronization, causing data racesNew
DRB117-taskwait-waitonlychild-orig-yes.cY3Thread encountering the taskwait is only waiting for the child task's completion, not the descendant tasks.New
DRB119-nestlock-orig-yes.cY3Missing omp_set_nest_lock() on a function called at multiple points.New
DRB123-taskundeferred-orig-yes.cY6A single thread spawning multiple tasks due to missing if(0)New
DRB124-master-orig-yes.cY3Master construct does not have an implicit barrier.New
DRB129-mergeable-taskwait-orig-yes.cY2Created task will access different instances of a variable depending on the mergeable status. Missing shared clause.New
DRB131-taskdep4-orig-omp45-yes.cY3Accessing a variable before the completion of the operation. Missing taskwait.New
DRB134-taskdep5-orig-omp45-yes.cY1Operation depends on two variables, but the depend clause is mentioned only for one variable.New
DRB136-taskdep-mutexinoutset-orig-yes.cY1,Y6Missing mutexinoutset dependence type on a variable. Undefined execution order.OpenMP Official Examples
DRB138-simdsafelen-orig-yes.cY6Parameter for safelen() clause having a value lesser than required for a defined execution.New
DRB140-reduction-barrier-orig-yes.cY3Asynchronous update by master directive and usage in reduction clause.New
DRB142-acquirerelease-orig-yes.cY3Missing implicit flush after critical construct.New
DRB144-critical-missingreduction-orig-gpu-yes.cY5, Y3Asynchronous update of a variable across teams due to improper critical and atomic construct usage.New
DRB148-critical1-orig-gpu-yes.cY5, Y3Due to different locks, addition and subtraction interleave.DRACC
DRB150-missinglock1-orig-gpu-yes.cY5, Y3distribute parallel for directive executes across teams. omp_set_lock() ensures synchronization only within a team.DRACC
DRB151-missinglock3-orig-gpu-yes.cY5, Y3Missing synchronization in teams distribute parallel for construct among a team of threads.DRACC
DRB153-missinglock2-orig-gpu-yes.cY5, Y2Concurrent access of a variable in an intra region with locks leading to intra region data race.DRACC
DRB156-missingordered-orig-gpu-yes.cY5, Y6Execution on accelerators with missing ordered directive causes data race.DRACC
DRB157-missingorderedsimd-orig-gpu-yes.cY5, Y4Missing synchronization on accelerator due to simd directive.DRACC
DRB160-nobarrier-orig-gpu-yes.cY5, Y3Missing implicit barrier due to distribute directive.DRACC
DRB161-nolocksimd-orig-gpu-yes.cY5, Y3Concurrent access on a counter with no lock with simd—atomicity Violation.DRACC
DRB164-simdmissinglock1-orig-gpu-yes.cY5, Y3Concurrent access on a counter with no lock with simd across teams. Inter-region data raceDRACC
DRB165-taskdep4-orig-omp50-yes.cY3Missing taskwait. Accessing a variable before task completion.OpenMP Official Examples
DRB168-taskdep5-orig-omp50-yes.cY1OpenMP depend clause for only one variable in a bivariate equation.OpenMP Official Examples
DRB169-missingsyncwrite-orig-yes.cY6Missing parallell construct for writeNAS Parallel Benchmarkss
DRB173-non-sibling-taskdep-yes.cY6Non-sibling tasks with declared task dependencyNew
DRB175-non-sibling-taskdep2-yes.cY6Non-sibling tasks with declared task dependencyNew
DRB177-fib-taskdep-yes.cY6Race due to scale problem size by providing size argumentFibonacci Code
DRB178-input-dependence-var-yes.cY1Input dependence raceOMPRacer
DRB179-thread-sensitivity-yes.ccY6Conflicting writes to same addressNew
DRB180-miniAMR-yes.cY6Race by shared index variableMiniAMR app
DRB181-SmithWaterman-yes.cY6Race appears with larger data sizeSmith-Waterman app
DRB183-atomic3-yes.cY3Races because the write is not protected by atomicSequential Consistency for Data-race-free Programs
DRB185-bar1-yes.cY3wrong 2-thread flag barrier using busy-waitsSequential Consistency for Data-race-free Programs
DRB187-bar2-yes.cY3each thread uses its own lock, which doesn't workSequential Consistency for Data-race-free Programs
DRB189-bar3-yes.cY3one synchronization missedSequential Consistency for Data-race-free Programs
DRB191-critsec2-yes.cY3has race due to different critical section namesSequential Consistency for Data-race-free Programs
DRB193-critsec3-yes.cY3has race due to different critical section namesSequential Consistency for Data-race-free Programs
DRB195-diffusion1-yes.cY3has race due to the missing of proper synchronization when u1 and u2 are aliasSequential Consistency for Data-race-free Programs
DRB197-diffusion2-yes.cY2has race due to the missing of proper synchronizationSequential Consistency for Data-race-free Programs
DRB199-prodcons-yes.cY3races due to critical sections have different namesSequential Consistency for Data-race-free Programs
DRB201-sync1-yes.cY3t1 can set then unset while setting t0. Both are write operations.Sequential Consistency for Data-race-free Programs

Microbenchmarks without known data races

MicrobenchmarkP-LabelDescriptionSource
DRB041-3mm-parallel-no.cN23-step matrix-matrix multiplication, non-optimized versionPolyhedral
DRB042-3mm-tile-no.cN2,N43-step matrix-matrix multiplication, with tiling and nested SIMDPolyhedral
DRB043-adi-parallel-no.cN2Alternating Direction Implicit solver, non-optimized versionPolyhedral
DRB044-adi-tile-no.cN2,N4Alternating Direction Implicit solver, with tiling and nested SIMDPolyhedral
DRB045-doall1-orig-no.cN1Classic DOAll loop operating on a one dimensional arrayAutoPar
DRB046-doall2-orig-no.cN1Classic DOAll loop operating on a two dimensional arrayAutoPar
DRB047-doallchar-orig-no.cN1Classic DOALL loop operating on a character arrayNew
DRB048-firstprivate-orig-no.cN2Example use of firstprivateAutoPar
DRB049-fprintf-orig-no.cN6Use of fprintf()New
DRB050-functionparameter-orig-no.cN6Arrays passed as function parametersLLNL App
DRB051-getthreadnum-orig-no.cN2single thread execution using if (omp_get_thread_num()==0)New
DRB052-indirectaccesssharebase-orig-no.cN7Indirect array accesses using index arrays without overlappingLLNL App
DRB053-inneronly1-orig-no.cN1Two-level nested loops, inner level is parallelizable. Anti dependence on outer levelAutoPar
DRB054-inneronly2-orig-no.cN1Two-level nested loops, inner level is parallelizable. True dependence on outer levelAutoPar
DRB055-jacobi2d-parallel-no.cN7Jacobi with array copying, no reduction, non-optimized versionPolyhedral
DRB056-jacobi2d-tile-no.cN4,N7Jacobi with array copying, no reduction, with tiling and nested SIMDPolyhedral
DRB057-jacobiinitialize-orig-no.cN7The array initialization parallel loop in JacobiAutoPar
DRB058-jacobikernel-orig-no.cN7Parallel Jacobi stencil computation kernel with array copying and reductionAutoPar
DRB059-lastprivate-orig-no.cN2Example use of lastprivateAutoPar
DRB060-matrixmultiply-orig-no.cN7Classic i-k-j order matrix multiplication using OpenMPAutoPar
DRB061-matrixvector1-orig-no.cN7Matrix-vector multiplication parallelized at the outer level loopAutoPar
DRB062-matrixvector2-orig-no.cN7Matrix-vector multiplication parallelized at the inner level loop with reductionAutoPar
DRB063-outeronly1-orig-no.cN2Two-level nested loops, outer level is parallelizable. Anti dependence on inner levelAutoPar
DRB064-outeronly2-orig-no.cN2Two-level nested loops, outer level is parallelizable. True dependence on inner levelAutoPar
DRB065-pireduction-orig-no.cN7PI calculation using reductionAutoPar
DRB066-pointernoaliasing-orig-no.cN6Pointers assigned by different malloc calls, without aliasingLLNL App
DRB067-restrictpointer1-orig-no.cN6C99 restrict pointers used for array initialization, no aliasingLLNL App
DRB068-restrictpointer2-orig-no.cN6C99 restrict pointers used for array computation, no aliasingLLNL App
DRB069-sectionslock1-orig-no.cN3OpenMP parallel sections with a lock to protect shared data writesNew
DRB070-simd1-orig-no.cN1,N4OpenMP SIMD directive to indicate vectorization of a loopNew
DRB071-targetparallelfor-orig-no.cN1,N5No data races in loops offloaded to acceleratorsNew
DRB072-taskdep1-orig-no.cN3OpenMP task with depend clauses to avoid data racesNew
DRB076-flush-orig-no.cN2OpenMP private clause to avoid data racesNew
DRB077-single-orig-no.cN1OpenMP single directive to use only one thread for executionNew
DRB078-taskdep2-orig-no.cN3OpenMP task depend clause to avoid data racesNew
DRB079-taskdep3-orig-no.cN3OpenMP task depend clause to avoid data racesNew
DRB081-func-arg-orig-no.cN6Function arguments passed by value, privateNew
DRB083-declared-in-func-orig-no.cN6A variable declared within a function called by a parallel regionNew
DRB085-threadprivate-orig-no.cN2Use threadprivate to protect a file scope variable, not referenced within a constructNew
DRB091-threadprivate2-orig-no.cN2Use threadprivate to protect a file scope variable, referenced within a constructNew
DRB093-doall2-collapse-orig-no.cN2Use collapse(n) to control the number of associated loops of omp forNew
DRB094-doall2-ordered-orig-no.cN2Use ordered(n) to control the number of associated loops of omp forNew
DRB096-doall2-taskloop-collapse-orig-no.cN2Use ordered(n) to control the number of associated loops of taskloopNew
DRB097-target-teams-distribute-orig-no.cN2Predetermined attribute rule for loop variable associated with distributeNew
DRB098-simd2-orig-no.cN1,N2OpenMP SIMD directive to indicate vectorization of two nested loopsNew
DRB099-targetparallelfor2-orig-no.cN1,N5Loops offloaded to accelerators: array sections derived from pointerNew
DRB100-task-reference-orig-no.cppN1OpenMP 4.5 feature: orphaned task generating construct using pass-by-referenceNew
DRB101-task-value-orig-no.cppN1In a task generating construct, a variable without applicable rules is firstprivateNew
DRB102-copyprivate-orig-no.cN2threadprivate+copyprivate, a variable without applicable rules is firstprivateNew
DRB103-master-orig-no.cN1master directive to ensure only one thread will execute data accessesNew
DRB104-nowait-barrier-orig-no.cN3Use barrier to ensure correct order of initialization and assignment phasesNew
DRB105-taskwait-orig-no.cN3Use taskwait to ensure correct order of tasksNew
DRB107-taskgroup-orig-no.cN3Use taskgroup to ensure correct order of tasksNew
DRB108-atomic-orig-no.cN3Use atomic to protect shared accesses to a variableNew
DRB110-ordered-orig-no.cN3Proper use of the ordered clause to avoid data racesNew
DRB112-linear-orig-no.cN2Use linear to privatize a variableNew
DRB113-default-orig-no.cN1default(none) to enforce explicitly listing variables in data-sharing clausesNew
DRB118-nestlock-orig-no.cN3Use of omp_set_nest_lock to be able to lock several times. Extracted from an official OpenMP exampleOpenMP Official Example
DRB120-barrier-orig-no.cN3Use barrier to ensure the correct order of increment ops.New
DRB121-reduction-orig-no.cN2Use reduction clause to get the correct sum within a parallel region.New
DRB122-taskundeferred-orig-no.cN6Undeferred all the tasks using if(0)OpenMP Official Example
DRB125-single-orig-no.cN1Single construct usage to have implicit barrier, private.New
DRB126-firstprivatesections-orig-no.cN1Use of firstprivate and omp_set_num_threads() to ensure that the same thread executes both the sections.New
DRB127-tasking-threadprivate1-orig-no.cN1Order execution is undefined. There is a race condition but no data race.New
DRB128-tasking-threadprivate2-orig-no.cN1Restricting update to a threadprivate variable.New
DRB130-mergeable-taskwait-orig-no.cN2Use of mergeable construct on a shared variable ensures that the outcome does not depend on task's merged status.New
DRB132-taskdep4-orig-omp45-no.cN3, N1Accessing a variable safely after taskwait directive, two variables. OpenMP 4.5 compliant.New
DRB133-taskdep5-orig-omp45-no.cN3Accessing a variable safely after taskwait directive, single variable. OpenMP 4.5 compliant.New
DRB135-taskdep-mutexinoutset-orig-no.cN1Use of mutexinoutset in depend clause to avoid data race.OpenMP Official Example
DRB137-simdsafelen-orig-no.cN1Use of safelen construct to avoid udnefined behavior.New
DRB139-worksharingcritical-orig-no.cN1Use of single directive inside a nested parallel region within a critical construct.New
DRB141-reduction-barrier-orig-no.cN3Addition of explicit barrier to ensure completion of initialization of a variable before encountering a parallel region.New
DRB143-acquirerelease-orig-no.cN3Use of flush after critical construct to avoid data race.New
DRB145-atomiccritical-orig-gpu-no.cN5, N2Use of reduction construct to synchronize across teams.New
DRB146-atomicupdate-orig-gpu-no.cN5, N3, N1Use of atomic update construct to have synchronization across teams.New
DRB147-critical1-orig-gpu-no.cN5, N1To have synchronization across distribute parallel loop across teams, usage of atomic construct.New
DRB149-missingdata1-orig-gpu-no.cN5Classic i-k-j matrix multiplication on accelerator.New
DRB152-missinglock2-orig-gpu-no.cN5, N3Use of omp_set_lock() to synchronize within a team.New
DRB154-missinglock3-orig-gpu-no.cN5, N3Use omp_set_lock() and reduction construct to avoid atomicity violations across teams on accelerators.New
DRB155-missingordered-orig-gpu-no.cN5, N1Proper use of the ordered clause to avoid data races, ensuring sequential consistency.New
DRB158-missingtaskbarrier-orig-gpu-no.cN5, N1Use of depend clause to ensure correct execution sequence.New
DRB159-nobarrier-orig-gpu-no.cN5, N3Vector addition and multiplication employing the same variable should have a barrier in between.New
DRB162-nolocksimd-orig-gpu-no.cN5, N4Use reduction clause to avoid concurrent access on a variable due to exceeding permitted threads usage per warp limit.New
DRB163-simdmissinglock1-orig-gpu-no.cN5, N4SIMD directive indicates vectorization of a loop on the accelerator; usage of reduction to ensure no data race.New
DRB166-taskdep4-orig-omp50-no.cN1Use of takwait to avoid data race due to access before decrement operation. OpenMP 5.0 compliant.OpenMP Official Example
DRB167-taskdep4-orig-omp50-no.cN1Dependency on two variables but defined only on one. Use of taskwait ensures no data race. OpenMP5.0 compliant.OpenMP Official Example
DRB170-nestedloops-orig-no.cN2Use of private clause to ensure no data raceNAS Benchmark
DRB171-threadprivate3-orig-no.cN1example of a threadprivate var and update by TID==0 onlyNAS Benchmark
DRB172-critical2-orig-no.cN2, N3Use of private and explicit barrier tto ensure no data race.NAS Benchmark
DRB174-non-sibling-taskdep-no.cN3Use of taskwait ensures no data race.New
DRB176-fib-taskdep-no.cN3Fibonacci code with proper task dependency.Fibonacci code
DRB182-atomic3-no.cN3sync with busy wait loop using atomicSequential Consistency for Data-race-free Programs
DRB184-bar1-no.cN32-thread flag barrier using busy-wait loops and critical, no raceSequential Consistency for Data-race-free Programs
DRB186-bar2-no.cN3uses locks to create a barrier that is used onceSequential Consistency for Data-race-free Programs
DRB188-bar3-no.cN3implements 2-thread reuseable barrier using 3 locks, no raceSequential Consistency for Data-race-free Programs
DRB190-critsec2-no.cN2, N3single producer single consumer with critical sectionsSequential Consistency for Data-race-free Programs
DRB192-critsec3-no.cN2, N3signal with busy wait loop using critical sectionsSequential Consistency for Data-race-free Programs
DRB194-diffusion1-no.cN1signal with busy wait loop using critical sectionsSequential Consistency for Data-race-free Programs
DRB196-diffusion2-no.cN1similar to diffusion1, but two parts of one malloced object usedSequential Consistency for Data-race-free Programs
DRB198-prodcons-no.cN1multiple producer, multiple consumer with critical sectionsSequential Consistency for Data-race-free Programs
DRB200-sync1-no.cN3two threads sync using one lockSequential Consistency for Data-race-free Programs