If both DOSERIAL and DOALL are specified, the last one prevails.
Example: Specifying both DOSERIAL and DOALL:
C$PAR DOSERIAL* do i = 1, 1000 C$PAR DOALL do j = 1, 1000 ... end do end do
In the preceding example, the i loop is not parallelized, but the j loop is.
Also, the scope of the DOSERIAL* directive does not extend beyond the textual loop nest immediately following it. The directive is limited to the same function or subroutine that it is in.
Example: DOSERIAL* does not extend to a loop of a called subroutine:
program caller common /block/ a(10,10) C$PAR DOSERIAL* do i = 1, 10 call callee(i) end do end subroutine callee(k) common /block/a(10,10) do j = 1, 10 a(j,k) = j + k end do return end
In the preceding example, DOSERIAL* applies only to the i loop and not to the j loop, regardless of whether the call to the subroutine callee is inlined.