brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · b0c3927 Raw
96 lines · plain
1! RUN: %flang_fc1 -fsyntax-only -fopenacc %s 2>&12C Test file for OpenACC directives in fixed-form Fortran3      PROGRAM ACCTEST4      IMPLICIT NONE5      INTEGER :: N, I, J6      PARAMETER (N=100)7      REAL :: A(N), B(N), C(N), D(N)8      REAL :: SUM9 10C Initialize arrays11      DO I = 1, N12         A(I) = I * 1.013         B(I) = I * 2.014         C(I) = 0.015         D(I) = 1.016      END DO17 18C Basic data construct using C$ACC19C$ACC DATA COPYIN(A,B) COPYOUT(C)20      DO I = 1, N21         C(I) = A(I) + B(I)22      END DO23C$ACC END DATA24 25* Parallel construct with loop using *$ACC26*$ACC PARALLEL PRESENT(A,B,C)27*$ACC LOOP28      DO I = 1, N29         C(I) = C(I) * 2.030      END DO31*$ACC END PARALLEL32 33C Nested loops with collapse - C$ACC style34C$ACC PARALLEL LOOP COLLAPSE(2)35      DO I = 1, N36         DO J = 1, N37            A(J) = A(J) + B(J)38         END DO39      END DO40C$ACC END PARALLEL LOOP41 42* Combined parallel loop with reduction - *$ACC style43      SUM = 0.044*$ACC PARALLEL LOOP REDUCTION(+:SUM)45      DO I = 1, N46         SUM = SUM + C(I)47      END DO48*$ACC END PARALLEL LOOP49 50C Kernels construct - C$ACC with continuation51C$ACC KERNELS 52C$ACC+ COPYOUT(A)53      DO I = 1, N54         A(I) = A(I) * 2.055      END DO56C$ACC END KERNELS57 58* Data construct with update - *$ACC with continuation59*$ACC DATA COPY(B)60*$ACC+ PRESENT(D)61      B(1) = 999.062*$ACC UPDATE HOST(B(1:1))63      PRINT *, 'B(1) = ', B(1)64*$ACC END DATA65 66C Mixed style directives in nested constructs67C$ACC DATA COPY(A,B,C)68*$ACC PARALLEL LOOP69      DO I = 1, N70         A(I) = B(I) + C(I)71      END DO72*$ACC END PARALLEL LOOP73C$ACC END DATA74 75* Subroutine call within data region - *$ACC style76*$ACC DATA COPY(A,B,C)77      CALL SUB1(A, B, C, N)78*$ACC END DATA79 80      PRINT *, 'Sum = ', SUM81      END PROGRAM82 83C Subroutine with mixed ACC directive styles84      SUBROUTINE SUB1(X, Y, Z, M)85      INTEGER M, I86      REAL X(M), Y(M), Z(M)87 88*$ACC PARALLEL PRESENT(X,Y)89C$ACC LOOP PRIVATE(I)90      DO I = 1, M91         Z(I) = X(I) + Y(I)92      END DO93C$ACC END LOOP94*$ACC END PARALLEL95      RETURN96      END SUBROUTINE