Retro68/gcc/libgomp/testsuite/libgomp.c++/shared-1.C

61 lines
822 B
C++
Raw Normal View History

2012-03-27 23:13:14 +00:00
#include <omp.h>
extern "C" void abort (void);
struct Y
{
int l[5][10];
};
struct X
{
struct Y y;
float b[10];
};
void
parallel (int a, int b)
{
int i, j;
struct X A[10][5];
a = b = 3;
for (i = 0; i < 10; i++)
for (j = 0; j < 5; j++)
A[i][j].y.l[3][3] = -10;
#pragma omp parallel shared (a, b, A) num_threads (5)
{
int i, j;
#pragma omp atomic
a += omp_get_num_threads ();
#pragma omp atomic
b += omp_get_num_threads ();
#pragma omp for private (j)
for (i = 0; i < 10; i++)
for (j = 0; j < 5; j++)
A[i][j].y.l[3][3] += 20;
}
for (i = 0; i < 10; i++)
for (j = 0; j < 5; j++)
if (A[i][j].y.l[3][3] != 10)
abort ();
if (a != 28)
abort ();
if (b != 28)
abort ();
}
main()
{
parallel (1, 2);
return 0;
}