depend-1.c 3.3 KB

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