Issue 180093
Summary [Flang][OpenMP] Incorrect execution result when LINEAR clause is specified for PARALLEL DO SIMD construct
Labels flang:openmp
Assignees
Reporter ohno-fj
    ```
Version of flang : 23.0.0(beb0e7e15005f96b144fcac51a765fedd52c4b7c)/AArch64
```

When `LINEAR clause` is specified for `PARALLEL DO SIMD construct`, incorrect results may be output during execution. However, it may also terminate normally.
As shown below, the frequency of incorrect result output increases as the value of `OMP_NUM_THREADS` grows larger.

The following are the test program, Flang, Gfortran and ifx compilation/execution results.

linear_007_2.f90:
```fortran
program main
  implicit none
 integer,parameter :: N = 100
  integer(4) :: i
  integer(4) :: k
 integer(4),parameter :: K_ANS = 100

  k = 0
!$omp parallel do simd linear(k)
  do i = 1,100
     k = k + 1
  end do
!$omp end parallel do simd

  if (k == K_ANS ) then
     print *, "OK"
  else
     print *, "NG", k ,K_ANS
  endif

end program main
```

```
$ flang -fopenmp linear_007_2.f90
$ export OMP_NUM_THREADS=1; ./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
$ export OMP_NUM_THREADS=2; ./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out
 NG 50 100
 OK
 OK
 OK
 OK
 NG 50 100
 OK
 OK
 OK
 OK
$ export OMP_NUM_THREADS=4; ./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out
 NG 50 100
 NG 50 100
 NG 25 100
 NG 50 100
 OK
 NG 75 100
 NG 50 100
 NG 50 100
 NG 50 100
 NG 50 100
$ export OMP_NUM_THREADS=8; ./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out
 OK
 OK
 OK
 NG 52 100
 NG 88 100
 NG 76 100
 NG 26 100
 NG 76 100
 NG 88 100
 OK
$ export OMP_NUM_THREADS=16; ./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out
 NG 40 100
 NG 14 100
 NG 64 100
 NG 52 100
 NG 46 100
 OK
 NG 14 100
 NG 46 100
 NG 52 100
 NG 70 100
$ export OMP_NUM_THREADS=32; ./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out
 NG 70 100
 NG 70 100
 NG 25 100
 NG 25 100
 NG 76 100
 NG 46 100
 NG 61 100
 OK
 NG 85 100
 NG 37 100
$
```

```
$ gfortran -fopenmp linear_007_2.f90
$ export OMP_NUM_THREADS=1; ./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
$ export OMP_NUM_THREADS=2; ./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
$ export OMP_NUM_THREADS=4; ./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
$ export OMP_NUM_THREADS=8; ./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
$ export OMP_NUM_THREADS=16; ./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
$ export OMP_NUM_THREADS=32; ./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
$
```

```
$ ifx -qopenmp linear_007_2.f90
$ export OMP_NUM_THREADS=1; ./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
$ export OMP_NUM_THREADS=2; ./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
$ export OMP_NUM_THREADS=4; ./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
$ export OMP_NUM_THREADS=8; ./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
$ export OMP_NUM_THREADS=16; ./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
$ export OMP_NUM_THREADS=32; ./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out;./a.out
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
 OK
$
```

_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to