1 integer :: v(16), i 2 do i = 1, 16 3 v(i) = i 4 end do 5 6 !$omp parallel num_threads (4) 7 !$omp single 8 !$omp taskgroup 9 do i = 1, 16, 2 10 !$omp task 11 !$omp task 12 v(i) = v(i) + 1 13 !$omp end task 14 !$omp task 15 v(i + 1) = v(i + 1) + 1 16 !$omp end task 17 !$omp end task 18 end do 19 !$omp end taskgroup 20 do i = 1, 16 21 if (v(i).ne.(i + 1)) STOP 1 22 end do 23 !$omp taskgroup 24 do i = 1, 16, 2 25 !$omp task 26 !$omp task 27 v(i) = v(i) + 1 28 !$omp endtask 29 !$omp task 30 v(i + 1) = v(i + 1) + 1 31 !$omp endtask 32 !$omp taskwait 33 !$omp endtask 34 end do 35 !$omp endtaskgroup 36 do i = 1, 16 37 if (v(i).ne.(i + 2)) STOP 2 38 end do 39 !$omp taskgroup 40 do i = 1, 16, 2 41 !$omp task 42 !$omp task 43 v(i) = v(i) + 1 44 !$omp end task 45 v(i + 1) = v(i + 1) + 1 46 !$omp end task 47 end do 48 !$omp taskwait 49 do i = 1, 16, 2 50 !$omp task 51 v(i + 1) = v(i + 1) + 1 52 !$omp end task 53 end do 54 !$omp end taskgroup 55 do i = 1, 16, 2 56 if (v(i).ne.(i + 3)) STOP 3 57 if (v(i + 1).ne.(i + 5)) STOP 4 58 end do 59 !$omp taskgroup 60 do i = 1, 16, 2 61 !$omp taskgroup 62 !$omp task 63 v(i) = v(i) + 1 64 !$omp end task 65 !$omp task 66 v(i + 1) = v(i + 1) + 1 67 !$omp end task 68 !$omp end taskgroup 69 if (v(i).ne.(i + 4).or.v(i + 1).ne.(i + 6)) STOP 5 70 !$omp task 71 v(i) = v(i) + 1 72 !$omp end task 73 end do 74 !$omp end taskgroup 75 do i = 1, 16 76 if (v(i).ne.(i + 5)) STOP 6 77 end do 78 !$omp end single 79 !$omp end parallel 80end 81