File: cpi-worker.c

package info (click to toggle)
mpi4py 4.1.0-4
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,540 kB
  • sloc: python: 34,465; ansic: 16,475; makefile: 614; sh: 325; cpp: 193; f90: 178
file content (33 lines) | stat: -rw-r--r-- 597 bytes parent folder | download | duplicates (9)
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
28
29
30
31
32
33
#include <mpi.h>

int main(int argc, char *argv[])
{
  int myrank, nprocs;
  int n, i;
  double h, s, pi;
  MPI_Comm master;

  MPI_Init(&argc, &argv);

  MPI_Comm_get_parent(&master);
  MPI_Comm_size(master, &nprocs);
  MPI_Comm_rank(master, &myrank);

  MPI_Bcast(&n, 1, MPI_INT, 0, master);

  h = 1.0 / (double) n;
  s = 0.0;
  for (i = myrank+1; i < n+1; i += nprocs) {
    double x = h * (i - 0.5);
    s += 4.0 / (1.0 + x*x);
  }
  pi = s * h;

  MPI_Reduce(&pi, MPI_BOTTOM, 1, MPI_DOUBLE,
             MPI_SUM, 0, master);

  MPI_Comm_disconnect(&master);

  MPI_Finalize();
  return 0;
}