order-reproducible-1.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include <unistd.h>
  2. #include <stdlib.h>
  3. int
  4. main ()
  5. {
  6. int a[128];
  7. #pragma omp teams num_teams(5)
  8. {
  9. #pragma omp loop bind(teams)
  10. for (int i = 0; i < 128; i++)
  11. {
  12. a[i] = i;
  13. if (i == 0)
  14. usleep (20);
  15. else if (i == 17)
  16. usleep (40);
  17. }
  18. #pragma omp loop bind(teams)
  19. for (int i = 0; i < 128; i++)
  20. a[i] += i;
  21. }
  22. for (int i = 0; i < 128; i++)
  23. if (a[i] != 2 * i)
  24. abort ();
  25. #pragma omp teams num_teams(5)
  26. {
  27. #pragma omp loop bind(teams) order(concurrent)
  28. for (int i = 0; i < 128; i++)
  29. {
  30. a[i] *= 2;
  31. if (i == 1)
  32. usleep (20);
  33. else if (i == 13)
  34. usleep (40);
  35. }
  36. #pragma omp loop bind(teams) order(concurrent)
  37. for (int i = 0; i < 128; i++)
  38. a[i] += i;
  39. }
  40. for (int i = 0; i < 128; i++)
  41. if (a[i] != 5 * i)
  42. abort ();
  43. #pragma omp teams num_teams(5)
  44. {
  45. #pragma omp loop bind(teams) order(reproducible:concurrent)
  46. for (int i = 0; i < 128; i++)
  47. {
  48. a[i] *= 2;
  49. if (i == 2)
  50. usleep (20);
  51. else if (i == 105)
  52. usleep (40);
  53. }
  54. #pragma omp loop bind(teams) order(reproducible:concurrent)
  55. for (int i = 0; i < 128; i++)
  56. a[i] += i;
  57. }
  58. for (int i = 0; i < 128; i++)
  59. if (a[i] != 11 * i)
  60. abort ();
  61. return 0;
  62. }