loop-5.c 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. #include <omp.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int
  5. test1 (void)
  6. {
  7. short int buf[64], *p;
  8. int i;
  9. memset (buf, '\0', sizeof (buf));
  10. #pragma omp parallel for
  11. for (p = &buf[10]; p < &buf[54]; p++)
  12. *p = 5;
  13. for (i = 0; i < 64; i++)
  14. if (buf[i] != 5 * (i >= 10 && i < 54))
  15. abort ();
  16. memset (buf, '\0', sizeof (buf));
  17. #pragma omp parallel for
  18. for (p = &buf[3]; p <= &buf[63]; p += 2)
  19. p[-2] = 6;
  20. for (i = 0; i < 64; i++)
  21. if (buf[i] != 6 * ((i & 1) && i <= 61))
  22. abort ();
  23. memset (buf, '\0', sizeof (buf));
  24. #pragma omp parallel for
  25. for (p = &buf[16]; p < &buf[51]; p = 4 + p)
  26. p[2] = 7;
  27. for (i = 0; i < 64; i++)
  28. if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53))
  29. abort ();
  30. memset (buf, '\0', sizeof (buf));
  31. #pragma omp parallel for
  32. for (p = &buf[16]; p <= &buf[40]; p = p + 4ULL)
  33. p[2] = -7;
  34. for (i = 0; i < 64; i++)
  35. if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42))
  36. abort ();
  37. memset (buf, '\0', sizeof (buf));
  38. #pragma omp parallel for
  39. for (p = &buf[53]; p > &buf[9]; --p)
  40. *p = 5;
  41. for (i = 0; i < 64; i++)
  42. if (buf[i] != 5 * (i >= 10 && i < 54))
  43. abort ();
  44. memset (buf, '\0', sizeof (buf));
  45. #pragma omp parallel for
  46. for (p = &buf[63]; p >= &buf[3]; p -= 2)
  47. p[-2] = 6;
  48. for (i = 0; i < 64; i++)
  49. if (buf[i] != 6 * ((i & 1) && i <= 61))
  50. abort ();
  51. memset (buf, '\0', sizeof (buf));
  52. #pragma omp parallel for
  53. for (p = &buf[48]; p > &buf[15]; p = -4 + p)
  54. p[2] = 7;
  55. for (i = 0; i < 64; i++)
  56. if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53))
  57. abort ();
  58. memset (buf, '\0', sizeof (buf));
  59. #pragma omp parallel for
  60. for (p = &buf[40]; p >= &buf[16]; p = p - 4ULL)
  61. p[2] = -7;
  62. for (i = 0; i < 64; i++)
  63. if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42))
  64. abort ();
  65. return 0;
  66. }
  67. int
  68. test2 (void)
  69. {
  70. int buf[64], *p;
  71. int i;
  72. memset (buf, '\0', sizeof (buf));
  73. #pragma omp parallel for schedule (static, 3)
  74. for (p = &buf[10]; p < &buf[54]; p++)
  75. *p = 5;
  76. for (i = 0; i < 64; i++)
  77. if (buf[i] != 5 * (i >= 10 && i < 54))
  78. abort ();
  79. memset (buf, '\0', sizeof (buf));
  80. #pragma omp parallel for schedule (static, 3)
  81. for (p = &buf[3]; p <= &buf[63]; p += 2)
  82. p[-2] = 6;
  83. for (i = 0; i < 64; i++)
  84. if (buf[i] != 6 * ((i & 1) && i <= 61))
  85. abort ();
  86. memset (buf, '\0', sizeof (buf));
  87. #pragma omp parallel for schedule (static, 3)
  88. for (p = &buf[16]; p < &buf[51]; p = 4 + p)
  89. p[2] = 7;
  90. for (i = 0; i < 64; i++)
  91. if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53))
  92. abort ();
  93. memset (buf, '\0', sizeof (buf));
  94. #pragma omp parallel for schedule (static, 3)
  95. for (p = &buf[16]; p <= &buf[40]; p = p + 4ULL)
  96. p[2] = -7;
  97. for (i = 0; i < 64; i++)
  98. if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42))
  99. abort ();
  100. memset (buf, '\0', sizeof (buf));
  101. #pragma omp parallel for schedule (static, 3)
  102. for (p = &buf[53]; p > &buf[9]; --p)
  103. *p = 5;
  104. for (i = 0; i < 64; i++)
  105. if (buf[i] != 5 * (i >= 10 && i < 54))
  106. abort ();
  107. memset (buf, '\0', sizeof (buf));
  108. #pragma omp parallel for schedule (static, 3)
  109. for (p = &buf[63]; p >= &buf[3]; p -= 2)
  110. p[-2] = 6;
  111. for (i = 0; i < 64; i++)
  112. if (buf[i] != 6 * ((i & 1) && i <= 61))
  113. abort ();
  114. memset (buf, '\0', sizeof (buf));
  115. #pragma omp parallel for schedule (static, 3)
  116. for (p = &buf[48]; p > &buf[15]; p = -4 + p)
  117. p[2] = 7;
  118. for (i = 0; i < 64; i++)
  119. if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53))
  120. abort ();
  121. memset (buf, '\0', sizeof (buf));
  122. #pragma omp parallel for schedule (static, 3)
  123. for (p = &buf[40]; p >= &buf[16]; p = p - 4ULL)
  124. p[2] = -7;
  125. for (i = 0; i < 64; i++)
  126. if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42))
  127. abort ();
  128. return 0;
  129. }
  130. int
  131. test3 (void)
  132. {
  133. int buf[64], *p;
  134. int i;
  135. memset (buf, '\0', sizeof (buf));
  136. #pragma omp parallel for schedule (dynamic, 3)
  137. for (p = &buf[10]; p < &buf[54]; p++)
  138. *p = 5;
  139. for (i = 0; i < 64; i++)
  140. if (buf[i] != 5 * (i >= 10 && i < 54))
  141. abort ();
  142. memset (buf, '\0', sizeof (buf));
  143. #pragma omp parallel for schedule (dynamic, 3)
  144. for (p = &buf[3]; p <= &buf[63]; p += 2)
  145. p[-2] = 6;
  146. for (i = 0; i < 64; i++)
  147. if (buf[i] != 6 * ((i & 1) && i <= 61))
  148. abort ();
  149. memset (buf, '\0', sizeof (buf));
  150. #pragma omp parallel for schedule (dynamic, 3)
  151. for (p = &buf[16]; p < &buf[51]; p = 4 + p)
  152. p[2] = 7;
  153. for (i = 0; i < 64; i++)
  154. if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53))
  155. abort ();
  156. memset (buf, '\0', sizeof (buf));
  157. #pragma omp parallel for schedule (dynamic, 3)
  158. for (p = &buf[16]; p <= &buf[40]; p = p + 4ULL)
  159. p[2] = -7;
  160. for (i = 0; i < 64; i++)
  161. if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42))
  162. abort ();
  163. memset (buf, '\0', sizeof (buf));
  164. #pragma omp parallel for schedule (dynamic, 3)
  165. for (p = &buf[53]; p > &buf[9]; --p)
  166. *p = 5;
  167. for (i = 0; i < 64; i++)
  168. if (buf[i] != 5 * (i >= 10 && i < 54))
  169. abort ();
  170. memset (buf, '\0', sizeof (buf));
  171. #pragma omp parallel for schedule (dynamic, 3)
  172. for (p = &buf[63]; p >= &buf[3]; p -= 2)
  173. p[-2] = 6;
  174. for (i = 0; i < 64; i++)
  175. if (buf[i] != 6 * ((i & 1) && i <= 61))
  176. abort ();
  177. memset (buf, '\0', sizeof (buf));
  178. #pragma omp parallel for schedule (dynamic, 3)
  179. for (p = &buf[48]; p > &buf[15]; p = -4 + p)
  180. p[2] = 7;
  181. for (i = 0; i < 64; i++)
  182. if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53))
  183. abort ();
  184. memset (buf, '\0', sizeof (buf));
  185. #pragma omp parallel for schedule (dynamic, 3)
  186. for (p = &buf[40]; p >= &buf[16]; p = p - 4ULL)
  187. p[2] = -7;
  188. for (i = 0; i < 64; i++)
  189. if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42))
  190. abort ();
  191. return 0;
  192. }
  193. int
  194. test4 (void)
  195. {
  196. int buf[64], *p;
  197. int i;
  198. memset (buf, '\0', sizeof (buf));
  199. #pragma omp parallel for schedule (runtime)
  200. for (p = &buf[10]; p < &buf[54]; p++)
  201. *p = 5;
  202. for (i = 0; i < 64; i++)
  203. if (buf[i] != 5 * (i >= 10 && i < 54))
  204. abort ();
  205. memset (buf, '\0', sizeof (buf));
  206. #pragma omp parallel for schedule (runtime)
  207. for (p = &buf[3]; p <= &buf[63]; p += 2)
  208. p[-2] = 6;
  209. for (i = 0; i < 64; i++)
  210. if (buf[i] != 6 * ((i & 1) && i <= 61))
  211. abort ();
  212. memset (buf, '\0', sizeof (buf));
  213. #pragma omp parallel for schedule (runtime)
  214. for (p = &buf[16]; p < &buf[51]; p = 4 + p)
  215. p[2] = 7;
  216. for (i = 0; i < 64; i++)
  217. if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53))
  218. abort ();
  219. memset (buf, '\0', sizeof (buf));
  220. #pragma omp parallel for schedule (runtime)
  221. for (p = &buf[16]; p <= &buf[40]; p = p + 4ULL)
  222. p[2] = -7;
  223. for (i = 0; i < 64; i++)
  224. if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42))
  225. abort ();
  226. memset (buf, '\0', sizeof (buf));
  227. #pragma omp parallel for schedule (runtime)
  228. for (p = &buf[53]; p > &buf[9]; --p)
  229. *p = 5;
  230. for (i = 0; i < 64; i++)
  231. if (buf[i] != 5 * (i >= 10 && i < 54))
  232. abort ();
  233. memset (buf, '\0', sizeof (buf));
  234. #pragma omp parallel for schedule (runtime)
  235. for (p = &buf[63]; p >= &buf[3]; p -= 2)
  236. p[-2] = 6;
  237. for (i = 0; i < 64; i++)
  238. if (buf[i] != 6 * ((i & 1) && i <= 61))
  239. abort ();
  240. memset (buf, '\0', sizeof (buf));
  241. #pragma omp parallel for schedule (runtime)
  242. for (p = &buf[48]; p > &buf[15]; p = -4 + p)
  243. p[2] = 7;
  244. for (i = 0; i < 64; i++)
  245. if (buf[i] != 7 * ((i & 3) == 2 && i >= 18 && i < 53))
  246. abort ();
  247. memset (buf, '\0', sizeof (buf));
  248. #pragma omp parallel for schedule (runtime)
  249. for (p = &buf[40]; p >= &buf[16]; p = p - 4ULL)
  250. p[2] = -7;
  251. for (i = 0; i < 64; i++)
  252. if (buf[i] != -7 * ((i & 3) == 2 && i >= 18 && i <= 42))
  253. abort ();
  254. return 0;
  255. }
  256. int
  257. main (void)
  258. {
  259. test1 ();
  260. test2 ();
  261. test3 ();
  262. omp_set_schedule (omp_sched_static, 0);
  263. test4 ();
  264. omp_set_schedule (omp_sched_static, 3);
  265. test4 ();
  266. omp_set_schedule (omp_sched_dynamic, 5);
  267. test4 ();
  268. omp_set_schedule (omp_sched_guided, 2);
  269. test4 ();
  270. return 0;
  271. }