diff options
Diffstat (limited to 'gcc/testsuite/gcc.dg/gomp/appendix-a/a.12.1.c')
-rw-r--r-- | gcc/testsuite/gcc.dg/gomp/appendix-a/a.12.1.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/gomp/appendix-a/a.12.1.c b/gcc/testsuite/gcc.dg/gomp/appendix-a/a.12.1.c new file mode 100644 index 000000000..fab948dd7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/gomp/appendix-a/a.12.1.c @@ -0,0 +1,41 @@ +/* { dg-do compile } */ + +#include <stdio.h> +extern float average (float, float, float); +void +a12 (float *x, float *xold, int n, float tol) +{ + int c, i, toobig; + float error, y; + c = 0; +#pragma omp parallel + { + do + { +#pragma omp for private(i) + for (i = 1; i < n - 1; ++i) + { + xold[i] = x[i]; + } +#pragma omp single + { + toobig = 0; + } +#pragma omp for private(i,y,error) reduction(+:toobig) + for (i = 1; i < n - 1; ++i) + { + y = x[i]; + x[i] = average (xold[i - 1], x[i], xold[i + 1]); + error = y - x[i]; + if (error > tol || error < -tol) + ++toobig; + } +#pragma omp master + { + ++c; + printf ("iteration %d, toobig=%d\n", c, toobig); + } + } + while (toobig > 0); + } +} |