// Computation of PI iteratively // WRONG version, very slow, too much critical section #include #include #include static long num_steps = 10000000; double step; void main () { int i; double x, pi, sum = 0.0; printf("SLOW\n"); step = 1.0/(double) num_steps; // make x private for each thread #pragma omp parallel for private(x) for (i=0;i< num_steps; i++){ x = (i+0.5)*step; // guard access to sum // BUT: TOO OFTEN (every iteration) // this will be SLOW #pragma omp critical sum = sum + 4.0/(1.0+x*x); } pi = step * sum; printf("pi=%lf\n", pi); }