OpenMP-Examples/sources/Example_reduction.2f.f
2015-01-13 11:38:24 -08:00

36 lines
822 B
Fortran

! @@name: reduction.2f
! @@type: F-free
! @@compilable: yes
! @@linkable: no
! @@expect: success
SUBROUTINE REDUCTION2(A, B, C, D, X, Y, N)
REAL :: X(*), A, D
INTEGER :: Y(*), N, B, C
REAL :: A_P, D_P
INTEGER :: I, B_P, C_P
A = 0
B = 0
C = Y(1)
D = X(1)
!$OMP PARALLEL SHARED(X, Y, A, B, C, D, N) &
!$OMP& PRIVATE(A_P, B_P, C_P, D_P)
A_P = 0.0
B_P = 0
C_P = HUGE(C_P)
D_P = -HUGE(D_P)
!$OMP DO PRIVATE(I)
DO I=1,N
A_P = A_P + X(I)
B_P = IEOR(B_P, Y(I))
C_P = MIN(C_P, Y(I))
IF (D_P < X(I)) D_P = X(I)
END DO
!$OMP CRITICAL
A = A + A_P
B = IEOR(B, B_P)
C = MIN(C, C_P)
D = MAX(D, D_P)
!$OMP END CRITICAL
!$OMP END PARALLEL
END SUBROUTINE REDUCTION2