loop-1.c 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. extern
  2. #ifdef __cplusplus
  3. "C"
  4. #endif
  5. void abort (void);
  6. #define N 256
  7. int r;
  8. void
  9. foo (int *a)
  10. {
  11. int i, j;
  12. #pragma omp loop bind(thread) order(concurrent) private (j) lastprivate (i) reduction(+:r) collapse(1)
  13. for (i = 0; i < N; i++)
  14. {
  15. j = i - 2;
  16. a[i] = j;
  17. r += j;
  18. }
  19. }
  20. void
  21. bar (int *a)
  22. {
  23. int i, j;
  24. #pragma omp loop bind(parallel) order(concurrent) private (j) lastprivate (i) reduction(+:r) collapse(1)
  25. for (i = 0; i < N; i++)
  26. {
  27. j = i;
  28. a[i] = j;
  29. r += j;
  30. }
  31. }
  32. void
  33. baz (int *a)
  34. {
  35. int i, j;
  36. #pragma omp loop bind(teams) order(concurrent) private (j) lastprivate (i) reduction(+:r)
  37. for (i = 0; i < N; i++)
  38. {
  39. j = i + 2;
  40. a[i] = j;
  41. r += j;
  42. }
  43. }
  44. int
  45. main ()
  46. {
  47. int a[N], i, j;
  48. foo (a);
  49. for (i = 0; i < N; ++i)
  50. if (a[i] != i - 2)
  51. abort ();
  52. else
  53. a[i] = -35;
  54. if (r != N * (N - 5) / 2)
  55. abort ();
  56. else
  57. r = 0;
  58. bar (a);
  59. for (i = 0; i < N; ++i)
  60. if (a[i] != i)
  61. abort ();
  62. else
  63. a[i] = -35;
  64. if (r != N * (N - 1) / 2)
  65. abort ();
  66. else
  67. r = 0;
  68. #pragma omp parallel loop private (j) lastprivate (i) reduction(+:r)
  69. for (i = 0; i < N; i++)
  70. {
  71. j = i + 4;
  72. a[i] = j;
  73. r += j;
  74. }
  75. if (i != N)
  76. abort ();
  77. for (i = 0; i < N; ++i)
  78. if (a[i] != i + 4)
  79. abort ();
  80. else
  81. a[i] = -35;
  82. if (r != N * (N + 7) / 2)
  83. abort ();
  84. else
  85. r = 0;
  86. #pragma omp parallel
  87. bar (a);
  88. for (i = 0; i < N; ++i)
  89. if (a[i] != i)
  90. abort ();
  91. else
  92. a[i] = -35;
  93. if (r != N * (N - 1) / 2)
  94. abort ();
  95. else
  96. r = 0;
  97. #pragma omp teams
  98. baz (a);
  99. for (i = 0; i < N; ++i)
  100. if (a[i] != i + 2)
  101. abort ();
  102. else
  103. a[i] = -35;
  104. if (r != N * (N + 3) / 2)
  105. abort ();
  106. else
  107. r = 0;
  108. #pragma omp teams loop order(concurrent) private (j) lastprivate (i) reduction(+:r) collapse(1)
  109. for (i = 0; i < N; i++)
  110. {
  111. j = i - 4;
  112. a[i] = j;
  113. r += j;
  114. }
  115. if (i != N)
  116. abort ();
  117. for (i = 0; i < N; ++i)
  118. if (a[i] != i - 4)
  119. abort ();
  120. if (r != N * (N - 9) / 2)
  121. abort ();
  122. return 0;
  123. }