The PARALLEL DO directive provides an abbreviated way to specify a parallel region containing a single DO directive.
The PARALLEL DO directive takes the following form:
c$OMP PARALLEL DO [clause[[,] clause] . . . ] do_loop [c$OMP END PARALLEL DO]
You cannot branch out of a DO loop associated with a DO directive.
If the END PARALLEL DO directive is not specified, the PARALLEL DO is assumed to end with the DO loop that immediately follows the PARALLEL DO directive. If used, the END PARALLEL DO directive must appear immediately after the end of the DO loop.
The semantics are identical to explicitly specifying a PARALLEL directive immediately followed by a DO directive.
In the following example, the loop iteration variable is private by default and it is not necessary to explicitly declare it. The END PARALLEL DO directive is optional:
c$OMP PARALLEL DO DO I=1,N B(I) = (A(I) + A(I-1)) / 2.0 END DO c$OMP END PARALLEL DO
The following example shows how to use the REDUCTION clause in a PARALLEL DO directive:
c$OMP PARALLEL DO DEFAULT(PRIVATE) REDUCTION(+: A,B) DO I=1,N CALL WORK(ALOCAL,BLOCAL) A = A + ALOCAL B = B + BLOCAL END DO c$OMP END PARALLEL DO