123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- extern
- #ifdef __cplusplus
- "C"
- #endif
- void abort (void);
- #define N 256
- int r;
- void
- foo (int *a)
- {
- int i, j;
- #pragma omp loop bind(thread) order(concurrent) private (j) lastprivate (i) reduction(+:r) collapse(1)
- for (i = 0; i < N; i++)
- {
- j = i - 2;
- a[i] = j;
- r += j;
- }
- }
- void
- bar (int *a)
- {
- int i, j;
- #pragma omp loop bind(parallel) order(concurrent) private (j) lastprivate (i) reduction(+:r) collapse(1)
- for (i = 0; i < N; i++)
- {
- j = i;
- a[i] = j;
- r += j;
- }
- }
- void
- baz (int *a)
- {
- int i, j;
- #pragma omp loop bind(teams) order(concurrent) private (j) lastprivate (i) reduction(+:r)
- for (i = 0; i < N; i++)
- {
- j = i + 2;
- a[i] = j;
- r += j;
- }
- }
- int
- main ()
- {
- int a[N], i, j;
- foo (a);
- for (i = 0; i < N; ++i)
- if (a[i] != i - 2)
- abort ();
- else
- a[i] = -35;
- if (r != N * (N - 5) / 2)
- abort ();
- else
- r = 0;
- bar (a);
- for (i = 0; i < N; ++i)
- if (a[i] != i)
- abort ();
- else
- a[i] = -35;
- if (r != N * (N - 1) / 2)
- abort ();
- else
- r = 0;
- #pragma omp parallel loop private (j) lastprivate (i) reduction(+:r)
- for (i = 0; i < N; i++)
- {
- j = i + 4;
- a[i] = j;
- r += j;
- }
- if (i != N)
- abort ();
- for (i = 0; i < N; ++i)
- if (a[i] != i + 4)
- abort ();
- else
- a[i] = -35;
- if (r != N * (N + 7) / 2)
- abort ();
- else
- r = 0;
- #pragma omp parallel
- bar (a);
- for (i = 0; i < N; ++i)
- if (a[i] != i)
- abort ();
- else
- a[i] = -35;
- if (r != N * (N - 1) / 2)
- abort ();
- else
- r = 0;
- #pragma omp teams
- baz (a);
- for (i = 0; i < N; ++i)
- if (a[i] != i + 2)
- abort ();
- else
- a[i] = -35;
- if (r != N * (N + 3) / 2)
- abort ();
- else
- r = 0;
- #pragma omp teams loop order(concurrent) private (j) lastprivate (i) reduction(+:r) collapse(1)
- for (i = 0; i < N; i++)
- {
- j = i - 4;
- a[i] = j;
- r += j;
- }
- if (i != N)
- abort ();
- for (i = 0; i < N; ++i)
- if (a[i] != i - 4)
- abort ();
- if (r != N * (N - 9) / 2)
- abort ();
- return 0;
- }
|