nonmonotonic-1.c 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /* { dg-do run } */
  2. #ifndef NONMONOTONIC_TYPE
  3. #include <omp.h>
  4. #include <stdlib.h>
  5. #define NONMONOTONIC_TYPE int
  6. #define NONMONOTONIC_END(n) n
  7. #endif
  8. int a[73];
  9. int
  10. main ()
  11. {
  12. NONMONOTONIC_TYPE i;
  13. #pragma omp parallel for schedule(nonmonotonic: dynamic)
  14. for (i = 0; i < NONMONOTONIC_END (73); i++)
  15. a[i]++;
  16. #pragma omp parallel for schedule(nonmonotonic: dynamic, 5)
  17. for (i = 0; i < NONMONOTONIC_END (73); i++)
  18. a[i]++;
  19. #pragma omp parallel for schedule(nonmonotonic: guided)
  20. for (i = 0; i < NONMONOTONIC_END (73); i++)
  21. a[i]++;
  22. #pragma omp parallel for schedule(nonmonotonic: guided, 7)
  23. for (i = 0; i < NONMONOTONIC_END (73); i++)
  24. a[i]++;
  25. #pragma omp parallel
  26. {
  27. int cnt = omp_get_num_threads ();
  28. int thr = omp_get_thread_num ();
  29. if (thr < 73)
  30. a[thr]++;
  31. #pragma omp barrier
  32. #pragma omp for schedule(nonmonotonic: dynamic)
  33. for (i = 0; i < NONMONOTONIC_END (73); i++)
  34. a[i]++;
  35. #pragma omp for schedule(nonmonotonic: dynamic, 7)
  36. for (i = 0; i < NONMONOTONIC_END (73); i++)
  37. a[i]++;
  38. #pragma omp for schedule(nonmonotonic: guided)
  39. for (i = 0; i < NONMONOTONIC_END (73); i++)
  40. a[i]++;
  41. #pragma omp for schedule(nonmonotonic: guided, 5)
  42. for (i = 0; i < NONMONOTONIC_END (73); i++)
  43. a[i]++;
  44. #pragma omp single private (i)
  45. for (i = 0; i < 73; i++)
  46. if (a[i] != 8 + (i < cnt))
  47. abort ();
  48. }
  49. return 0;
  50. }