1#include <stdlib.h> 2 3void 4dep (void) 5{ 6 int x = 1; 7 #pragma omp parallel 8 #pragma omp single 9 { 10 #pragma omp task shared (x) depend(out: x) 11 x = 2; 12 #pragma omp task shared (x) depend(in: x) 13 if (x != 2) 14 abort (); 15 } 16} 17 18void 19dep2 (void) 20{ 21 #pragma omp parallel 22 #pragma omp single 23 { 24 int x = 1; 25 #pragma omp task shared (x) depend(out: x) 26 x = 2; 27 #pragma omp task shared (x) depend(in: x) 28 if (x != 2) 29 abort (); 30 #pragma omp taskwait 31 } 32} 33 34void 35dep3 (void) 36{ 37 #pragma omp parallel 38 { 39 int x = 1; 40 #pragma omp single 41 { 42 #pragma omp task shared (x) depend(out: x) 43 x = 2; 44 #pragma omp task shared (x) depend(in: x) 45 if (x != 2) 46 abort (); 47 } 48 } 49} 50 51void 52firstpriv (void) 53{ 54 #pragma omp parallel 55 #pragma omp single 56 { 57 int x = 1; 58 #pragma omp task depend(out: x) 59 x = 2; 60 #pragma omp task depend(in: x) 61 if (x != 1) 62 abort (); 63 } 64} 65 66void 67antidep (void) 68{ 69 int x = 1; 70 #pragma omp parallel 71 #pragma omp single 72 { 73 #pragma omp task shared(x) depend(in: x) 74 if (x != 1) 75 abort (); 76 #pragma omp task shared(x) depend(out: x) 77 x = 2; 78 } 79} 80 81void 82antidep2 (void) 83{ 84 #pragma omp parallel 85 #pragma omp single 86 { 87 int x = 1; 88 #pragma omp taskgroup 89 { 90 #pragma omp task shared(x) depend(in: x) 91 if (x != 1) 92 abort (); 93 #pragma omp task shared(x) depend(out: x) 94 x = 2; 95 } 96 } 97} 98 99void 100antidep3 (void) 101{ 102 #pragma omp parallel 103 { 104 int x = 1; 105 #pragma omp single 106 { 107 #pragma omp task shared(x) depend(in: x) 108 if (x != 1) 109 abort (); 110 #pragma omp task shared(x) depend(out: x) 111 x = 2; 112 } 113 } 114} 115 116 117void 118outdep (void) 119{ 120 #pragma omp parallel 121 #pragma omp single 122 { 123 int x = 0; 124 #pragma omp task shared(x) depend(out: x) 125 x = 1; 126 #pragma omp task shared(x) depend(out: x) 127 x = 2; 128 #pragma omp taskwait 129 if (x != 2) 130 abort (); 131 } 132} 133 134void 135concurrent (void) 136{ 137 int x = 1; 138 #pragma omp parallel 139 #pragma omp single 140 { 141 #pragma omp task shared (x) depend(out: x) 142 x = 2; 143 #pragma omp task shared (x) depend(in: x) 144 if (x != 2) 145 abort (); 146 #pragma omp task shared (x) depend(in: x) 147 if (x != 2) 148 abort (); 149 #pragma omp task shared (x) depend(in: x) 150 if (x != 2) 151 abort (); 152 } 153} 154 155void 156concurrent2 (void) 157{ 158 #pragma omp parallel 159 #pragma omp single 160 { 161 int x = 1; 162 #pragma omp task shared (x) depend(out: x) 163 x = 2; 164 #pragma omp task shared (x) depend(in: x) 165 if (x != 2) 166 abort (); 167 #pragma omp task shared (x) depend(in: x) 168 if (x != 2) 169 abort (); 170 #pragma omp task shared (x) depend(in: x) 171 if (x != 2) 172 abort (); 173 #pragma omp taskwait 174 } 175} 176 177void 178concurrent3 (void) 179{ 180 #pragma omp parallel 181 { 182 int x = 1; 183 #pragma omp single 184 { 185 #pragma omp task shared (x) depend(out: x) 186 x = 2; 187 #pragma omp task shared (x) depend(in: x) 188 if (x != 2) 189 abort (); 190 #pragma omp task shared (x) depend(in: x) 191 if (x != 2) 192 abort (); 193 #pragma omp task shared (x) depend(in: x) 194 if (x != 2) 195 abort (); 196 } 197 } 198} 199 200int 201main () 202{ 203 dep (); 204 dep2 (); 205 dep3 (); 206 firstpriv (); 207 antidep (); 208 antidep2 (); 209 antidep3 (); 210 outdep (); 211 concurrent (); 212 concurrent2 (); 213 concurrent3 (); 214 return 0; 215} 216