source: CIVL/examples/omp/dataracebench-1.3.2/micro-benchmarks-fortran/DRB147-critical1-orig-gpu-no.f95

main
Last change on this file was ea777aa, checked in by Alex Wilton <awilton@…>, 3 years ago

Moved examples, include, build_default.properties, common.xml, and README out from dev.civl.com into the root of the repo.

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

  • Property mode set to 100755
File size: 1.1 KB
Line 
1!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!!!
2!!! Copyright (c) 2017-20, Lawrence Livermore National Security, LLC
3!!! and DataRaceBench project contributors. See the DataRaceBench/COPYRIGHT file for details.
4!!!
5!!! SPDX-License-Identifier: (BSD-3-Clause)
6!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!!!
7
8!Concurrent access on same variable var@23 and var@25 leads to the race condition if two different
9!locks are used. This is the reason here we have used the atomic directive to ensure that addition
10!and subtraction are not interleaved. No data race pairs.
11
12program DRB147_critical1_orig_gpu_no
13 use omp_lib
14 implicit none
15
16 integer :: var, i
17 var = 0
18
19 !$omp target map(tofrom:var) device(0)
20 !$omp teams distribute parallel do
21 do i = 0, 100
22 !$omp atomic
23 var = var+1
24 !$omp atomic
25 var = var-2
26 end do
27 !$omp end teams distribute parallel do
28 !$omp end target
29
30 print*, var
31end program
Note: See TracBrowser for help on using the repository browser.