#include #include #include #include #include #include #include clock_t u_clock() { struct tms t; return times(&t); } int main(int argc, char* argv[]) { int np, nr; clock_t t1, t2; long long int i, nn, ns, n=10000000000; double pi=0.0, x, use, pis[50]; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &np); MPI_Comm_rank(MPI_COMM_WORLD, &nr); nn = n/np; ns = nr*nn; t1 = u_clock(); #pragma omp parallel for private(i,x) reduction(+:pi) for (i=ns+1; i<=ns+nn; i++) { x = i; pi = pi + 6.0/(x*x); } MPI_Gather(&pi,1,MPI_REAL8,pis,1,MPI_REAL8, 0,MPI_COMM_WORLD); if(nr == 0) { pi = 0.0; for (i=0; i