1#include <stdlib.h> 2#include <unistd.h> 3 4int 5main () 6{ 7 #pragma omp parallel 8 #pragma omp single 9 { 10 int x = 1, y = 2, z = 3; 11 #pragma omp taskgroup 12 { 13 #pragma omp task shared (x, y, z) depend(inout: x, y) \ 14 depend (in: z) if (x > 10) 15 { 16 if (x != 1 || y != 2 || z != 3) 17 abort (); 18 x = 4; 19 y = 5; 20 } 21 /* The above task has depend clauses, but no dependencies 22 on earlier tasks, and is if (0), so must be scheduled 23 immediately. */ 24 if (x != 4 || y != 5) 25 abort (); 26 } 27 #pragma omp taskgroup 28 { 29 #pragma omp task shared (x, y) depend(in: x, y) 30 { 31 usleep (10000); 32 if (x != 4 || y != 5 || z != 3) 33 abort (); 34 } 35 #pragma omp task shared (x, y) depend(in: x, y) 36 { 37 usleep (10000); 38 if (x != 4 || y != 5 || z != 3) 39 abort (); 40 } 41 #pragma omp task shared (x, y, z) depend(inout: x, y) \ 42 depend (in: z) if (x > 10) 43 { 44 if (x != 4 || y != 5 || z != 3) 45 abort (); 46 x = 6; 47 y = 7; 48 } 49 /* The above task has depend clauses, and may have dependencies 50 on earlier tasks, while it is if (0), it can be deferred. */ 51 } 52 if (x != 6 || y != 7) 53 abort (); 54 } 55 return 0; 56} 57