Microbenchmark property labels (P-Labels)

August 25, 2022 · 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.f95Y1Anti-dependence within a single loopNew
DRB002-antidep1-var-yes.f95Y1Anti-dependence within a single loopNew
DRB003-antidep2-orig-yes.f95Y1Anti-dependence within a two-level loop nestNew
DRB004-antidep2-var-yes.f95Y1Anti-dependence within a two-level loop nestNew
DRB005-indirectaccess1-orig-yes.f95Y7Indirect access with overlapped index array elementsNew
DRB006-indirectaccess2-orig-yes.f95Y7Overlapping index array elements when 36 or more threads are usedNew
DRB007-indirectaccess3-orig-yes.f95Y7Overlapping index array elements when 60 or more threads are usedNew
DRB008-indirectaccess4-orig-yes.f95Y7Overlapping index array elements when 180 or more threads are usedNew
DRB009-lastprivatemissing-orig-yes.f95Y2Data race due to a missing lastprivate() clauseNew
DRB010-lastprivatemissing-var-yes.f95Y2Data race due to a missing lastprivate() clauseNew
DRB011-minusminus-orig-yes.f95Y3Unprotected decrement operation, var = var - 1New
DRB012-minusminus-var-yes.f95Y3Unprotected decrement operation, var = var - 1New
DRB013-nowait-orig-yes.f95Y3Missing barrier due to a wrongfully used nowaitNew
DRB014-outofbounds-orig-yes.f95Y6Out of bound access of the 2nd dimension of arrayNew
DRB015-outofbounds-var-yes.f95Y6Out of bound access of the 2nd dimension of arrayNew
DRB016-outputdep-orig-yes.f95Y1Output dependence and true dependence within a loopNew
DRB017-outputdep-var-yes.f95Y1Output dependence and true dependence within a loopNew
DRB018-plusplus-orig-yes.f95Y1increment operation on array index variable, var = var + 1New
DRB019-plusplus-var-yes.f95Y1increment operation on array index variable, var = var + 1New
DRB020-privatemissing-var-yes.f95Y2Missing private() for a temp variableNew
DRB021-reductionmissing-orig-yes.f95Y2Missing private() for a temp variableNew
DRB022-reductionmissing-var-yes.f95Y2Missing reduction() for a variableNew
DRB023-sections1-orig-yes.f95Y2Missing reduction() for a variableNew
DRB024-simdtruedep-orig-yes.f95Y3Unprotected data writes in parallel sectionsNew
DRB025-simdtruedep-var-yes.f95Y1,Y4SIMD instruction level data racesNew
DRB026-targetparallelfor-orig-yes.f95Y1,Y4SIMD instruction level data racesNew
DRB027-taskdependmissing-orig-yes.f95Y1,Y5Data races in loops offloaded to acceleratorsNew
DRB028-privatemissing-orig-yes.f95Y3Unprotected data writes in two tasksNew
DRB029-truedep1-orig-yes.f95Y1True data dependence among multiple array elements within a single level loopNew
DRB030-truedep1-var-yes.f95Y1True data dependence among multiple array elements within a single level loopNew
DRB031-truedepfirstdimension-(orig|var)-yes.f95Y1True data dependence of first dimension for a 2-D array accessesNew
DRB032-truedepfirstdimension-(orig|var)-yes.f95Y1True data dependence of first dimension for a 2-D array accessesNew
DRB033-truedeplinear-orig-yes.f95Y1Linear equation as array subscriptNew
DRB034-truedeplinear-var-yes.f95Y1Linear equation as array subscriptNew
DRB035-truedepscalar-orig-yes.f95Y1True data dependence due to scalarNew
DRB036-truedepscalar-var-yes.f95Y1True data dependence due to scalarNew
DRB037-truedepseconddimension-(orig|var)-yes.f95Y1True data dependence on 2nd dimension of a 2-D array accessesNew
DRB038-truedepseconddimension-(orig|var)-yes.f95Y1True data dependence on 2nd dimension of a 2-D array accessesNew
DRB039-truedepsingleelement-(orig|var)-yes.f95Y1True data dependence due to a single array elementNew
DRB040-truedepsingleelement-(orig|var)-yes.f95Y1True data dependence due to a single array elementNew
DRB073-doall2-orig-yes.f95Y2Missing private() for inner loop nest's loop index variableNew
DRB074-flush-orig-yes.f95Y2Reduction using a shared variable, extracted from an official OpenMP exampleNew
DRB075-getthreadnum-orig-yes.f95Y1Work sharing within one branch of a if statementNew
DRB080-func-arg-orig-yes.f95Y6Function arguments passed by reference, inheriting shared attributeNew
DRB082-declared-in-func-orig-yes.f95Y6A variable declared within a function called by a parallel regionNew
DRB084-threadprivatemissing-orig-yes.f95Y2Missing threadprivate for a global var, not referenced within a constructNew
DRB086-static-data-member-orig-yes.f95Y2Missing threadprivate for a static member, not referenced within a constructNew
DRB087-static-data-member2-orig-yes.f95Y2Missing threadprivate for a static member, referenced within a constructNew
DRB088-dynamic-storage-orig-yes.f95Y2Data race for a dynamica storage variable, not referenced within a constructNew
DRB089-dynamic-storage2-orig-yes.f95Y2Data race for a dynamica storage variable, referenced within a constructNew
DRB090-static-local-orig-yes.f95Y2Data race for a locally declared static variableNew
DRB092-threadprivatemissing2-orig-yes.f95Y2Missing threadprivate for a variable referenced within a constructNew
DRB095-doall2-taskloop-orig-yes.f95Y2Missing protection for inner loop's loop variableNew
DRB106-taskwaitmissing-orig-yes.f95Y3Missing taskwait to ensure correct order of calculationsNew
DRB109-orderedmissing-orig-yes.f95Y3Missing the ordered clause, causing data racesNew
DRB111-linearmissing-orig-yes.f95Y2Missing linear for a shared variable, causing data racesNew
DRB114-if-orig-yes.f95Y1True data dependence within a single level loop, with if() clauseNew
DRB115-forsimd-orig-yes.f95Y1,Y4Both thread and instruction level data races due to omp loop simdNew
DRB116-target-teams-orig-yes.f95Y3Master threads of two teams do not have synchronization, causing data racesNew
DRB117-taskwait-waitonlychild-orig-yes.f95Y3Thread encountering the taskwait is only waiting for the child task's completion, not the descendant tasks.New
DRB119-nestlock-orig-yes.f95Y3Missing omp_set_nest_lock() on a function called at multiple points.New
DRB123-taskundeferred-orig-yes.f95Y6A single thread spawning multiple tasks due to missing if(0)New
DRB124-master-orig-yes.f95Y3Master construct does not have an implicit barrier.New
DRB129-mergeable-taskwait-orig-yes.f95Y2Created task will access different instances of a variable depending on the mergeable status. Missing shared clause.New
DRB131-taskdep4-orig-omp45-yes.f95Y3Accessing a variable before the completion of the operation. Missing taskwait.New
DRB134-taskdep5-orig-omp45-yes.f95Y1Operation depends on two variables, but the depend clause is mentioned only for one variable.New
DRB136-taskdep-mutexinoutset-orig-yes.f95Y1,Y6Missing mutexinoutset dependence type on a variable. Undefined execution order.OpenMP Official Examples
DRB138-simdsafelen-orig-yes.f95Y6Parameter for safelen() clause having a value lesser than required for a defined execution.New
DRB140-reduction-barrier-orig-yes.f95Y3Asynchronous update by master directive and usage in reduction clause.New
DRB142-acquirerelease-orig-omp50-yes.f95Y3Missing implicit flush after critical construct.New
DRB144-critical-missingreduction-orig-gpu-yes.f95Y5,Y3Asynchronous update of a variable across teams due to improper critical and atomic construct usage.New
DRB148-critical1-orig-gpu-yes.f95Y5,Y3Due to different locks, addition and subtraction interleave.New
DRB150-missinglock1-orig-gpu-yes.f95Y5,Y3distribute parallel do directive executes across teams. omp_set_lock() ensures synchronization only within a team.New
DRB151-missinglock3-orig-gpu-yes.f95Y5,Y3Missing synchronization in teams distribute parallel do construct among a team of threads.New
DRB153-missinglock2-orig-gpu-yes.f95Y5,Y2Concurrent access of a variable in an intra region with locks leading to intra region data race.New
DRB156-missingordered-orig-gpu-yes.f95Y5,Y6Execution on accelerators with missing ordered directive causes data race.New
DRB157-missingorderedsimd-orig-gpu-yes.f95Y5,Y4Missing synchronization on accelerator due to simd directive.New
DRB160-nobarrier-orig-gpu-yes.f95Y5,Y3Missing implicit barrier due to distribute directive.New
DRB161-nolocksimd-orig-gpu-yes.f95Y5,Y3Concurrent access on a counter with no lock with simd—atomicity Violation.New
DRB164-simdmissinglock1-orig-gpu-yes.f95Y5,Y3Concurrent access on a counter with no lock with simd across teams. Inter-region data raceNew
DRB165-taskdep4-orig-omp50-yes.f95Y3Missing taskwait. Accessing a variable before task completion.OpenMP Official Examples
DRB168-taskdep5-orig-omp50-yes.f95Y1OpenMP depend clause for only one variable in a bivariate equation.OpenMP Official Examples
DRB169-workshare-orig-yes.f95Y3nowait clause nullifying the workshare directive's implicit barrier.New
DRB171-input-dependence-var-yes.f95Y1Input dependence raceOMPRacer
DRB172-thread-sensitivity-yes.f95Y6Conflicting writes to same addressNew

Microbenchmarks without known data races

MicrobenchmarkP-LabelDescriptionSource
DRB043-adi-parallel-no.F95N2Alternating Direction Implicit solver, non-optimized versionNew
DRB044-adi-tile-no.F95N2,N4Alternating Direction Implicit solver, with tiling and nested SIMDNew
DRB045-doall1-orig-no.f95N1Classic DOAll loop operating on a one dimensional arrayNew
DRB046-doall2-orig-no.f95N1Classic DOAll loop operating on a two dimensional arrayNew
DRB047-doallchar-orig-no.f95N1,N3Classic DOAll loop operating on a character arrayNew
DRB048-firstprivate-orig-no.f95N2Example use of firstprivateNew
DRB049-fprintf-orig-no.f95N6Use of write()New
DRB050-functionparameter-orig-no.f95N6Arrays passed as function parametersNew
DRB051-getthreadnum-orig-no.f95N2Single thread execution using if (omp_get_thread_num()==0)New
DRB052-indirectaccesssharebase-orig-no.f95N7Indirect array accesses using index arrays without overlappingNew
DRB053-inneronly1-orig-no.f95N1Two-level nested loops, inner level is parallelizable. Anti dependence on outer levelNew
DRB054-inneronly2-orig-no.f95N1Two-level nested loops, inner level is parallelizable. True dependence on outer levelNew
DRB057-jacobiinitialize-orig-no.f95N7The array initialization parallel loop in JacobiNew
DRB058-jacobikernel-orig-no.f95N7Parallel Jacobi stencil computation kernel with array copying and reductionNew
DRB059-lastprivate-orig-no.f95N2Example use of lastprivateNew
DRB060-matrixmultiply-orig-no.f95N7Classic i-k-j order matrix multiplication using OpenMPNew
DRB061-matrixvector1-orig-no.f95N7Matrix-vector multiplication parallelized at the outer level loopNew
DRB062-matrixvector2-orig-no.f95N7Matrix-vector multiplication parallelized at the inner level loop with reductionNew
DRB063-outeronly1-orig-no.f95N2Two-level nested loops, outer level is parallelizable. Anti dependence on inner levelNew
DRB064-outeronly2-orig-no.f95N2Two-level nested loops, outer level is parallelizable. True dependence on inner levelNew
DRB065-pireduction-orig-no.f95N7PI calculation using reductionNew
DRB066-pointernoaliasing-orig-no.f95N6Pointers assigned by different malloc calls, without aliasingNew
DRB067-restrictpointer1-orig-no.f95N6Equivalent to restrict pointers used for array initialization, no aliasingNew
DRB068-restrictpointer2-orig-no.f95N6Equivalent to restrict pointers used for array computation, no aliasingNew
DRB069-sectionslock1-orig-no.f95N3OpenMP parallel sections with a lock to protect shared data writesNew
DRB070-simd1-orig-no.f95N1,N4OpenMP SIMD directive to indicate vectorization of a loopNew
DRB071-targetparallelfor-orig-no.f95N1,N5No data races in loops offloaded to acceleratorsNew
DRB072-taskdep1-orig-no.f95N3OpenMP task with depend clauses to avoid data racesNew
DRB076-flush-orig-no.f95N2OpenMP private clause to avoid data racesNew
DRB077-single-orig-no.f95N1OpenMP single directive to use only one thread for executionNew
DRB078-taskdep2-orig-no.f95N3OpenMP task depend clause to avoid data racesNew
DRB079-taskdep3-orig-no.f95N3OpenMP task depend clause to avoid data racesNew
DRB081-func-arg-orig-no.f95N6Function arguments passed by value, privateNew
DRB083-declared-in-func-orig-no.f95N6A variable declared within a function called by a parallel regionNew
DRB085-threadprivate-orig-no.f95N2Use threadprivate to protect a file scope variable, not referenced within a constructNew
DRB091-threadprivate2-orig-no.f95N2Use threadprivate to protect a file scope variable, referenced within a constructNew
DRB093-doall2-collapse-orig-no.f95N2Use collapse(n) to control the number of associated loops of omp doNew
DRB094-doall2-ordered-orig-no.f95N2Use ordered(n) to control the number of associated loops of omp doNew
DRB096-doall2-taskloop-collapse-orig-no.f95N2Use ordered(n) to control the number of associated loops of taskloopNew
DRB097-target-teams-distribute-orig-no.f95N2Predetermined attribute rule for loop variable associated with distributeNew
DRB098-simd2-orig-no.f95N1,N2OpenMP SIMD directive to indicate vectorization of two nested loopsNew
DRB099-targetparallelfor2-orig-no.f95N1,N5Loops offloaded to accelerators: array sections derived from pointerNew
DRB100-task-reference-orig-no.f95N1OpenMP 4.5 feature: orphaned task generating construct using pass-by-referenceNew
DRB101-task-value-orig-no.f95N1In a task generating construct, a variable without applicable rules is firstprivateNew
DRB102-copyprivate-orig-no.f95N2threadprivate+copyprivate, a variable without applicable rules is firstprivateNew
DRB103-master-orig-no.f95N1master directive to ensure only one thread will execute data accessesNew
DRB104-nowait-barrier-orig-no.f95N3Use barrier to ensure correct order of initialization and assignment phasesNew
DRB105-taskwait-orig-no.f95N3Use taskwait to ensure correct order of tasksNew
DRB107-taskgroup-orig-no.f95N3Use taskgroup to ensure correct order of tasksNew
DRB108-atomic-orig-no.f95N3Use atomic to protect shared accesses to a variableNew
DRB110-ordered-orig-no.f95N3Proper use of the ordered clause to avoid data racesNew
DRB112-linear-orig-no.f95N2Use linear to privatize a variableNew
DRB113-default-orig-no.f95N1default(none) to enforce explicitly listing variables in data-sharing clausesNew
DRB118-nestlock-orig-no.f95N3Use of omp_set_nest_lock to be able to lock several times. Extracted from an official OpenMP exampleOpenMP Official Example
DRB120-barrier-orig-no.f95N3Use barrier to ensure the correct order of increment ops.New
DRB121-reduction-orig-no.f95N2Use reduction clause to get the correct sum within a parallel region.New
DRB122-taskundeferred-orig-no.f95N6Undeferred all the tasks using if(0)OpenMP Official Example
DRB125-single-orig-no.f95N1Single construct usage to have implicit barrier, private.New
DRB126-firstprivatesections-orig-no.f95N1Use of firstprivate and omp_set_num_threads() to ensure that the same thread executes both the sections.New
DRB127-tasking-threadprivate1-orig-no.f95N1Order execution is undefined. There is a race condition but no data race.New
DRB128-tasking-threadprivate2-orig-no.f95N1Restricting update to a threadprivate variable.New
DRB130-mergeable-taskwait-orig-no.f95N2Use 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.f95N3, N1Accessing a variable safely after taskwait directive, two variables. OpenMP 4.5 compliant.New
DRB133-taskdep5-orig-omp45-no.f95N3Accessing a variable safely after taskwait directive, single variable. OpenMP 4.5 compliant.New
DRB135-taskdep-mutexinoutset-orig-omp50-no.f95N1Use of mutexinoutset in depend clause to avoid data race.OpenMP Official Example
DRB137-simdsafelen-orig-no.f95N1Use of safelen construct to avoid udnefined behavior.New
DRB139-worksharingcritical-orig-no.f95N1Use of single directive inside a nested parallel region within a critical construct.New
DRB141-reduction-barrier-orig-no.f95N3Addition of explicit barrier to ensure completion of initialization of a variable before encountering a parallel region.New
DRB143-acquirerelease-orig-omp50-no.f95N3Use of flush after critical construct to avoid data race.New
DRB145-atomiccritical-orig-gpu-no.f95N5, N2Use of reduction construct to synchronize across teams.New
DRB146-atomicupdate-orig-gpu-no.f95N5, N3, N1Use of atomic update construct to have synchronization across teams.New
DRB147-critical1-orig-gpu-no.f95N5, N1To have synchronization across distribute parallel loop across teams, usage of atomic construct.New
DRB149-missingdata1-orig-gpu-no.f95N5Classic i-k-j matrix multiplication on accelerator.New
DRB152-missinglock2-orig-gpu-no.f95N5, N3Use of omp_set_lock() to synchronize within a team.New
DRB154-missinglock3-orig-gpu-no.f95N5, N3Use omp_set_lock() and reduction construct to avoid atomicity violations across teams on accelerators.New
DRB155-missingordered-orig-gpu-no.f95N5, N1Proper use of the ordered clause to avoid data races, ensuring sequential consistency.New
DRB158-missingtaskbarrier-orig-gpu-no.f95N5, N1Use of depend clause to ensure correct execution sequence.New
DRB159-nobarrier-orig-gpu-no.f95N5, N3Vector addition and multiplication employing the same variable should have a barrier in between.New
DRB162-nolocksimd-orig-gpu-no.f95N5, 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.f95N5, N4SIMD directive indicates vectorization of a loop on the accelerator; usage of reduction to ensure no data race.New
DRB166-taskdep4-orig-omp50-no.f95N1Use of takwait to avoid data race due to access before decrement operation. OpenMP 5.0 compliant.OpenMP Official Example
DRB167-taskdep5-orig-omp50-no.f95N1Dependency on two variables but defined only on one. Use of taskwait ensures no data race. OpenMP5.0 compliant.OpenMP Official Example
DRB170-workshare-orig-no.f95N3Workshare construct has an implicit barrier.New