51 lines
856 B
C
51 lines
856 B
C
![]() |
#ifdef __cplusplus
|
||
|
extern "C"
|
||
|
#endif
|
||
|
void abort ();
|
||
|
|
||
|
int
|
||
|
main ()
|
||
|
{
|
||
|
int a[64] = {};
|
||
|
int r = 0, r2 = 0, i;
|
||
|
#pragma omp parallel
|
||
|
{
|
||
|
#pragma omp scope nowait
|
||
|
#pragma omp scope nowait
|
||
|
#pragma omp for
|
||
|
for (i = 0; i < 64; i++)
|
||
|
a[i] += 1;
|
||
|
#pragma omp scope reduction(+: r) nowait
|
||
|
{
|
||
|
#pragma omp for nowait
|
||
|
for (i = 0; i < 64; i++)
|
||
|
{
|
||
|
r += i;
|
||
|
if (a[i] != 1)
|
||
|
abort ();
|
||
|
}
|
||
|
#pragma omp barrier
|
||
|
}
|
||
|
#pragma omp barrier
|
||
|
if (r != 64 * 63 / 2)
|
||
|
abort ();
|
||
|
#pragma omp scope nowait private (i)
|
||
|
#pragma omp scope reduction(+: r2)
|
||
|
{
|
||
|
#pragma omp for nowait
|
||
|
for (i = 0; i < 64; i++)
|
||
|
{
|
||
|
r2 += 2 * i;
|
||
|
a[i] += i;
|
||
|
}
|
||
|
}
|
||
|
if (r2 != 64 * 63)
|
||
|
abort ();
|
||
|
#pragma omp for nowait
|
||
|
for (i = 0; i < 64; i++)
|
||
|
if (a[i] != i + 1)
|
||
|
abort ();
|
||
|
}
|
||
|
return 0;
|
||
|
}
|