mirror of
https://github.com/OpenMP/Examples.git
synced 2025-04-07 23:22:11 +01:00
36 lines
822 B
Fortran
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
|