#include #include #include "mpi.h" #include #include //#include int main(int argc, char** argv) { long n, i; double total; struct timeval tv; struct timezone tz; long starttimeSec, starttimeMicro; long endtimeSec, endtimeMicro; long totalSec, totalMicro; long starttime, endtime; int rank, size; MPI_Init( &argc, &argv ); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); if (argc > 1) n = atoi(argv[1]); else n = 1000; gettimeofday(&tv, &tz); starttimeSec = tv.tv_sec; starttimeMicro = tv.tv_usec; printf("Start Time process %d =%d sec %d microsec\n", rank, starttimeSec, starttimeMicro); // starttime = MPI_Wtime(); // printf("Start time for process %d = %ld\n", rank, starttime); // printf("Time(0)=%u\n", time(0)); total = 0.0; for(i = 1; i <= n; i++) { if(i % 4 == 1) { total += 1.0 / i; } else if (i % 4 == 3) { total -= 1.0 / i; } } gettimeofday(&tv, &tz); endtimeSec = tv.tv_sec; endtimeMicro = tv.tv_usec; printf("End Time for process %d = %d sec %d microsec\n", rank, endtimeSec, endtimeMicro); if (endtimeSec > starttimeSec) { totalSec = endtimeSec-starttimeSec; totalMicro = endtimeMicro + (1000000 - starttimeMicro); } else { totalSec = 0; totalMicro = endtimeMicro - starttimeMicro; } /* endtime = MPI_Wtime(); printf("End time for process %d = %ld\n", rank, endtime); printf("Total time for process %d = %ld\n", rank, endtime-starttime); */ // printf("Time(0)=%u\n", ftime(0)); printf("Process %d: Pi = %.32f for %d iterations.\n", rank, total * 4, n); printf("Process %d: Real PI = %.32lf\n", rank, M_PI); printf("Process %d: Percent error = %.32lf\n", rank, fabs((total*4)-M_PI)/M_PI * 100); printf("Time for process %d: %d sec and %d microsec\n", rank, totalSec, totalMicro); MPI_Finalize(); return 0; }