#include <stdio.h>
#include <omp.h>
static long num_steps = 100000000;
double step;
int main() {
double pi, sum = 0.0;
double start_time, end_time;
step = 1.0 / (double) num_steps;
start_time = omp_get_wtime();
#pragma omp parallel
{
double x;
double local_sum = 0.0;
#pragma omp for
for (int i = 0; i < num_steps; i++) {
x = (i + 0.5) * step;
local_sum += 4.0 / (1.0 + x * x);
}
#pragma omp atomic
sum += local_sum;
}
pi = step * sum;
end_time = omp_get_wtime();
printf("Computed pi = %.15f\n", pi);
printf("Runtime = %.6f seconds\n", end_time - start_time);
return 0;
}
|