From 2b5c0adb27d9e4d72f6d1487cc533f8671c288b9 Mon Sep 17 00:00:00 2001 From: Neil Gershenfeld <gersh@cba.mit.edu> Date: Sat, 17 Nov 2018 12:24:58 -0500 Subject: [PATCH] wip --- MPI/mpipi.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100755 MPI/mpipi.c diff --git a/MPI/mpipi.c b/MPI/mpipi.c new file mode 100755 index 0000000..cf4343d --- /dev/null +++ b/MPI/mpipi.c @@ -0,0 +1,49 @@ +/* +* mpipi.c +* Neil Gershenfeld 2/5/11 +* use MPI to evaluate pi by summation +*/ + +#include <stdio.h> +#include <mpi.h> +#include <sys/time.h> + +#define NPTS 100000000 +#define NLOOP 10 + +void main(int argc, char** argv) { + int rank,nproc,i,istart,iend,loop,N; + unsigned long int start_time,end_time; + struct timeval start,end; + double sum,pi,mflops; + + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &nproc); + if (rank == 0) { + gettimeofday(&start, NULL); + istart = 1 + NPTS*((rank+0.0)/nproc); + iend = NPTS*((rank+1.0)/nproc); + sum = 0.0; + for (loop = 0; loop < NLOOP; ++loop) + for (i = istart; i <= iend; ++i) + sum += 0.5/((i-0.75)*(i-0.25)); + MPI_Reduce(&sum,&pi,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD); + gettimeofday(&end, NULL); + start_time = start.tv_sec * 1e6 + start.tv_usec; + end_time = end.tv_sec * 1e6 + end.tv_usec; + mflops = NLOOP*(NPTS*(5.0/(end_time-start_time))); + printf("processes = %d, NPTS = %d, NLOOP = %d, pi = %f\n",nproc,NPTS,NLOOP,pi/NLOOP); + printf("time = %f, estimated MFlops = %f\n",(end_time-start_time)/1.0e6,mflops); + } + else { + istart = 1 + NPTS*((rank+0.0)/nproc); + iend = NPTS*((rank+1.0)/nproc); + sum = 0.0; + for (loop = 0; loop < NLOOP; ++loop) + for (i = istart; i <= iend; ++i) + sum += 0.5/((i-0.75)*(i-0.25)); + MPI_Reduce(&sum,&pi,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD); + } + MPI_Finalize(); + } -- GitLab