\(\pi\) calculation¶
Serial¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <stdio.h>
#define NSTEPS 20000000000
int main()
{
double pi, sum, step, x;
long int i;
sum = 0;
step = 1.0 / (double)NSTEPS;
for (i=1; i<=NSTEPS; i++)
{
x = step * ((double)i-0.5);
sum += 4.0/(1.0+x*x);
}
pi = sum * step;
printf("Pi is %4.12f\n", pi);
return 0;
}
|
OpenMP¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | #include <stdio.h>
#include <omp.h>
#define NSTEPS 200000
int main()
{
double pi, sum, step, x;
long int i;
sum = 0;
step = 1.0 / (double)NSTEPS;
#pragma omp parallel
#pragma omp for private(i,x) reduction(+:sum)
for (i=1; i<=NSTEPS; i++)
{
x = step * ((double)i-0.5);
sum += 4.0/(1.0+x*x);
}
pi = sum * step;
printf("Pi is %4.12f\n", pi);
return 0;
}
|