slide 30 of 37
Compute Pi Using MPI
#include
#include
#include
main(int argc,
char **argv)
{
register double width;
double sum, lsum;
register int intervals, i;
int nproc, iproc;
/* Initialize MPI */
if (MPI_Init(&argc, &argv) != MPI_SUCCESS) exit(1);
MPI_Comm_size( MPI_COMM_WORLD, &nproc );
MPI_Comm_rank( MPI_COMM_WORLD, &iproc );
/* get the number of intervals */
intervals = atoi(argv[1]);
width = 1.0 / intervals;
/* do the local computations */
lsum = 0;
for (i=iproc; i<intervals; i+=nproc) {
register double x = (i + 0.5) * width;
lsum += 4.0 / (1.0 + x * x);
}
/* sum across the local results & scale by width */
lsum *= width;
MPI_Reduce(&lsum, &sum, 1, MPI_DOUBLE,
MPI_SUM, 0, MPI_COMM_WORLD);
/* have only the console PE print the result */
if (iproc == 0) {
printf("Estimation of pi is %14.12lf\n", sum);
}
/* check-out */
MPI_Finalize();
exit(0);
}