| program main |
| implicit none |
| integer :: a(0:63), b = 1 |
| !$omp parallel num_threads (4) |
| block |
| !$omp single |
| block |
| integer :: i |
| !$omp taskwait depend(in: a) nowait |
| !$omp taskwait depend(in: a) nowait |
| !$omp taskwait |
| !$omp taskgroup |
| block |
| !$omp taskwait depend(in: a) nowait |
| !$omp taskwait depend(in: a) nowait |
| end block |
| do i = 0, 63 |
| !$omp task depend(in: a) shared(a) |
| block |
| a(i) = i |
| end block |
| end do |
| !$omp taskwait depend(inout: a) nowait |
| do i = 0, 63 |
| !$omp task depend(inoutset: a) shared(a) |
| block |
| if (a(i) /= i) then |
| error stop |
| else |
| a(i) = 2 * i + 1 |
| end if |
| end block |
| end do |
| !$omp taskwait nowait depend(out: a) depend(in: b) |
| !$omp taskwait depend(inout: b) |
| do i = 0, 63 |
| if (a(i) /= 2 * i + 1) & |
| error stop |
| end do |
| end block |
| end block |
| end program |