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
|
#include <mpi.h>
int main(int argc, char *argv[])
{
MPI::Init();
MPI::Intercomm master = MPI::Comm::Get_parent();
int nprocs = master.Get_size();
int myrank = master.Get_rank();
int n;
master.Bcast(&n, 1, MPI_INT, 0);
double h = 1.0 / (double) n;
double s = 0.0;
for (int i = myrank+1; i < n+1; i += nprocs) {
double x = h * (i - 0.5);
s += 4.0 / (1.0 + x*x);
}
double pi = s * h;
master.Reduce(&pi, MPI_BOTTOM, 1, MPI_DOUBLE,
MPI_SUM, 0);
master.Disconnect();
MPI::Finalize();
return 0;
}
|