128 lines
2.1 KiB
C
128 lines
2.1 KiB
C
|
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;
|
||
|
}
|