48 lines
689 B
C
48 lines
689 B
C
/* { dg-do run } */
|
|
|
|
#include <stdio.h>
|
|
|
|
float
|
|
work1 (int i)
|
|
{
|
|
return 1.0 * i;
|
|
}
|
|
|
|
float
|
|
work2 (int i)
|
|
{
|
|
return 2.0 * i;
|
|
}
|
|
|
|
void
|
|
a16 (float *x, float *y, int *index, int n)
|
|
{
|
|
int i;
|
|
#pragma omp parallel for shared(x, y, index, n)
|
|
for (i = 0; i < n; i++)
|
|
{
|
|
#pragma omp atomic
|
|
x[index[i]] += work1 (i);
|
|
y[i] += work2 (i);
|
|
}
|
|
}
|
|
int
|
|
main ()
|
|
{
|
|
float x[1000];
|
|
float y[10000];
|
|
int index[10000];
|
|
int i;
|
|
for (i = 0; i < 10000; i++)
|
|
{
|
|
index[i] = i % 1000;
|
|
y[i] = 0.0;
|
|
}
|
|
for (i = 0; i < 1000; i++)
|
|
x[i] = 0.0;
|
|
a16 (x, y, index, 10000);
|
|
for (i = 0; i < 10; i++)
|
|
printf ("x[%d] = %f, y[%d] = %f\n", i, x[i], i, y[i]);
|
|
return 0;
|
|
}
|