! RUN: %flang_fc1 -fsyntax-only -fopenacc %s 2>&1 C Test file for OpenACC directives in fixed-form Fortran PROGRAM ACCTEST IMPLICIT NONE INTEGER :: N, I, J PARAMETER (N=100) REAL :: A(N), B(N), C(N), D(N) REAL :: SUM C Initialize arrays DO I = 1, N A(I) = I * 1.0 B(I) = I * 2.0 C(I) = 0.0 D(I) = 1.0 END DO C Basic data construct using C$ACC C$ACC DATA COPYIN(A,B) COPYOUT(C) DO I = 1, N C(I) = A(I) + B(I) END DO C$ACC END DATA * Parallel construct with loop using *$ACC *$ACC PARALLEL PRESENT(A,B,C) *$ACC LOOP DO I = 1, N C(I) = C(I) * 2.0 END DO *$ACC END PARALLEL C Nested loops with collapse - C$ACC style C$ACC PARALLEL LOOP COLLAPSE(2) DO I = 1, N DO J = 1, N A(J) = A(J) + B(J) END DO END DO C$ACC END PARALLEL LOOP * Combined parallel loop with reduction - *$ACC style SUM = 0.0 *$ACC PARALLEL LOOP REDUCTION(+:SUM) DO I = 1, N SUM = SUM + C(I) END DO *$ACC END PARALLEL LOOP C Kernels construct - C$ACC with continuation C$ACC KERNELS C$ACC+ COPYOUT(A) DO I = 1, N A(I) = A(I) * 2.0 END DO C$ACC END KERNELS * Data construct with update - *$ACC with continuation *$ACC DATA COPY(B) *$ACC+ PRESENT(D) B(1) = 999.0 *$ACC UPDATE HOST(B(1:1)) PRINT *, 'B(1) = ', B(1) *$ACC END DATA C Mixed style directives in nested constructs C$ACC DATA COPY(A,B,C) *$ACC PARALLEL LOOP DO I = 1, N A(I) = B(I) + C(I) END DO *$ACC END PARALLEL LOOP C$ACC END DATA * Subroutine call within data region - *$ACC style *$ACC DATA COPY(A,B,C) CALL SUB1(A, B, C, N) *$ACC END DATA PRINT *, 'Sum = ', SUM END PROGRAM C Subroutine with mixed ACC directive styles SUBROUTINE SUB1(X, Y, Z, M) INTEGER M, I REAL X(M), Y(M), Z(M) *$ACC PARALLEL PRESENT(X,Y) C$ACC LOOP PRIVATE(I) DO I = 1, M Z(I) = X(I) + Y(I) END DO C$ACC END LOOP *$ACC END PARALLEL RETURN END SUBROUTINE