| ! PR middle-end/100905 |
| ! |
| PROGRAM test_loop_order_concurrent |
| implicit none |
| integer :: a, cc(64), dd(64) |
| |
| dd = 54 |
| cc = 99 |
| |
| call test_loop() |
| call test_affinity(a) |
| if (a /= 5) stop 3 |
| call test_scan(cc, dd) |
| if (any (cc /= 99)) stop 4 |
| if (dd(1) /= 5 .or. dd(2) /= 104) stop 5 |
| |
| CONTAINS |
| |
| SUBROUTINE test_loop() |
| INTEGER,DIMENSION(1024):: a, b, c |
| INTEGER:: i |
| |
| DO i = 1, 1024 |
| a(i) = 1 |
| b(i) = i + 1 |
| c(i) = 2*(i + 1) |
| END DO |
| |
| !$omp loop order(concurrent) bind(thread) |
| DO i = 1, 1024 |
| a(i) = a(i) + b(i)*c(i) |
| END DO |
| |
| DO i = 1, 1024 |
| if (a(i) /= 1 + (b(i)*c(i))) stop 1 |
| END DO |
| END SUBROUTINE test_loop |
| |
| SUBROUTINE test_affinity(aa) |
| integer :: aa |
| !$omp task affinity(aa) |
| a = 5 |
| !$omp end task |
| end |
| |
| subroutine test_scan(c, d) |
| integer i, c(*), d(*) |
| !$omp simd reduction (inscan, +: a) |
| do i = 1, 64 |
| d(i) = a |
| !$omp scan exclusive (a) |
| a = a + c(i) |
| end do |
| end |
| END PROGRAM test_loop_order_concurrent |