\(\pi\) calculation

Serial

download

 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

download

 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;
}