#include #include #include static long num_steps = 100000000; int main () { int j; double pi, sum = 0.0; double step = 1.0/(double) num_steps; int P = omp_get_max_threads(); // available treads double *sums = (double*) malloc(P*sizeof(double)); #pragma omp parallel { int i; double x; double psum = 0.0; // private int ID = omp_get_thread_num(); for (i=ID;i< num_steps; i = i+P){ x = (i+0.5)*step; psum = psum + 4.0/(1.0+x*x); } sums[ID] = psum; } for (j = 0; j < P; j++) sum += sums[j]; pi = step * sum; printf("pi=%lf\n", pi); free(sums); }