| 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