URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Go to most recent revision |
Only display areas with differences |
Details |
Blame |
View Log
Rev 273 |
Rev 519 |
! { dg-do run }
|
! { dg-do run }
|
SUBROUTINE F1(Q)
|
SUBROUTINE F1(Q)
|
COMMON /DATA/ P, X
|
COMMON /DATA/ P, X
|
INTEGER, TARGET :: X
|
INTEGER, TARGET :: X
|
INTEGER, POINTER :: P
|
INTEGER, POINTER :: P
|
INTEGER Q
|
INTEGER Q
|
Q=1
|
Q=1
|
!$OMP FLUSH
|
!$OMP FLUSH
|
! X, P and Q are flushed
|
! X, P and Q are flushed
|
! because they are shared and accessible
|
! because they are shared and accessible
|
END SUBROUTINE F1
|
END SUBROUTINE F1
|
SUBROUTINE F2(Q)
|
SUBROUTINE F2(Q)
|
COMMON /DATA/ P, X
|
COMMON /DATA/ P, X
|
INTEGER, TARGET :: X
|
INTEGER, TARGET :: X
|
INTEGER, POINTER :: P
|
INTEGER, POINTER :: P
|
INTEGER Q
|
INTEGER Q
|
!$OMP BARRIER
|
!$OMP BARRIER
|
Q=2
|
Q=2
|
!$OMP BARRIER
|
!$OMP BARRIER
|
! a barrier implies a flush
|
! a barrier implies a flush
|
! X, P and Q are flushed
|
! X, P and Q are flushed
|
! because they are shared and accessible
|
! because they are shared and accessible
|
END SUBROUTINE F2
|
END SUBROUTINE F2
|
|
|
INTEGER FUNCTION G(N)
|
INTEGER FUNCTION G(N)
|
COMMON /DATA/ P, X
|
COMMON /DATA/ P, X
|
INTEGER, TARGET :: X
|
INTEGER, TARGET :: X
|
INTEGER, POINTER :: P
|
INTEGER, POINTER :: P
|
INTEGER N
|
INTEGER N
|
INTEGER I, J, SUM
|
INTEGER I, J, SUM
|
I=1
|
I=1
|
SUM = 0
|
SUM = 0
|
P=1
|
P=1
|
!$OMP PARALLEL REDUCTION(+: SUM) NUM_THREADS(2)
|
!$OMP PARALLEL REDUCTION(+: SUM) NUM_THREADS(2)
|
CALL F1(J)
|
CALL F1(J)
|
! I, N and SUM were not flushed
|
! I, N and SUM were not flushed
|
! because they were not accessible in F1
|
! because they were not accessible in F1
|
! J was flushed because it was accessible
|
! J was flushed because it was accessible
|
SUM = SUM + J
|
SUM = SUM + J
|
CALL F2(J)
|
CALL F2(J)
|
! I, N, and SUM were not flushed
|
! I, N, and SUM were not flushed
|
! because they were not accessible in f2
|
! because they were not accessible in f2
|
! J was flushed because it was accessible
|
! J was flushed because it was accessible
|
SUM = SUM + I + J + P + N
|
SUM = SUM + I + J + P + N
|
!$OMP END PARALLEL
|
!$OMP END PARALLEL
|
G = SUM
|
G = SUM
|
END FUNCTION G
|
END FUNCTION G
|
|
|
PROGRAM A19
|
PROGRAM A19
|
COMMON /DATA/ P, X
|
COMMON /DATA/ P, X
|
INTEGER, TARGET :: X
|
INTEGER, TARGET :: X
|
INTEGER, POINTER :: P
|
INTEGER, POINTER :: P
|
INTEGER RESULT, G
|
INTEGER RESULT, G
|
P => X
|
P => X
|
RESULT = G(10)
|
RESULT = G(10)
|
PRINT *, RESULT
|
PRINT *, RESULT
|
IF (RESULT .NE. 30) THEN
|
IF (RESULT .NE. 30) THEN
|
CALL ABORT
|
CALL ABORT
|
ENDIF
|
ENDIF
|
END PROGRAM A19
|
END PROGRAM A19
|
|
|
© copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.