xref: /openbsd-src/gnu/gcc/libgomp/testsuite/libgomp.fortran/omp_reduction.f (revision 404b540a9034ac75a6199ad1a32d1bbc7a0d4210)
1*404b540aSrobertC******************************************************************************
2*404b540aSrobertC FILE: omp_reduction.f
3*404b540aSrobertC DESCRIPTION:
4*404b540aSrobertC   OpenMP Example - Combined Parallel Loop Reduction - Fortran Version
5*404b540aSrobertC   This example demonstrates a sum reduction within a combined parallel loop
6*404b540aSrobertC   construct.  Notice that default data element scoping is assumed - there
7*404b540aSrobertC   are no clauses specifying shared or private variables.  OpenMP will
8*404b540aSrobertC   automatically make loop index variables private within team threads, and
9*404b540aSrobertC   global variables shared.
10*404b540aSrobertC AUTHOR: Blaise Barney  5/99
11*404b540aSrobertC LAST REVISED:
12*404b540aSrobertC******************************************************************************
13*404b540aSrobert
14*404b540aSrobert      PROGRAM REDUCTION
15*404b540aSrobert
16*404b540aSrobert      INTEGER I, N
17*404b540aSrobert      REAL A(100), B(100), SUM
18*404b540aSrobert
19*404b540aSrobert!     Some initializations
20*404b540aSrobert      N = 100
21*404b540aSrobert      DO I = 1, N
22*404b540aSrobert        A(I) = I *1.0
23*404b540aSrobert        B(I) = A(I)
24*404b540aSrobert      ENDDO
25*404b540aSrobert      SUM = 0.0
26*404b540aSrobert
27*404b540aSrobert!$OMP PARALLEL DO REDUCTION(+:SUM)
28*404b540aSrobert      DO I = 1, N
29*404b540aSrobert        SUM = SUM + (A(I) * B(I))
30*404b540aSrobert      ENDDO
31*404b540aSrobert
32*404b540aSrobert      PRINT *, '   Sum = ', SUM
33*404b540aSrobert      END
34