Hello guys
I work on a small parallel program, which calculates pi number from area of a quarter circle. I'm new on ubuntu & C programming.
This is the code.
Code:
#include <stdio.h>
#include <mpi.h>
#include <math.h>
#include <time.h>
#define Ndx 600000000
int main (int argc, char* argv[])
{
int labindex, nw;
MPI_Init (&argc, &argv); /* starts MPI */
MPI_Comm_rank (MPI_COMM_WORLD, &labindex); /* get current process id */
MPI_Comm_size (MPI_COMM_WORLD, &nw); /* get number of processes */
int i;
double dx, x, y, sum, pi;
double range_start;
double te, te1;
dx=1./Ndx;
range_start=labindex*(1./nw);
sum=0;
for(i=0;i<Ndx/nw;i++)
{
x=range_start+i*dx+dx/2;
y=sqrt(1-pow(x,2));
sum=sum+dx*y;
}
MPI_Reduce(&sum,&pi,1,MPI_DOUBLE,MPI_SUM,0,MPI_COMM_WORLD);
pi=pi*4; //quarter to full circle
if (labindex==0)
{
te1=clock();
te=((float)te1)/CLOCKS_PER_SEC;
printf("pi=%.20f\n",pi);
printf("difference is=%.20f\n",pi-acos(-1));
printf("total time elapsed %f s",te);
}
MPI_Finalize();
return 0;
}
The question is:
My laptop has i7 processor with hyper-threading. And as a guess I should be able to use at most 8 workers/processors when running the program.You may see the outputs of the program below. Strange thing is I'm able to run the code with 80 workers. And it seems quite fast. How can this be?
Thank you
Code:
mpicc pi.c -Wall -o pi -lm
pi=3.14159265358961548031
difference is=-0.00000000000017763568
total time elapsed 19.639999
pi=3.14159265358966033332
difference is=-0.00000000000013278267
total time elapsed 9.570000
pi=3.14159265358984729488
difference is=0.00000000000005417888
total time elapsed 4.800000
pi=3.14159265358979489235
difference is=0.00000000000000177636
total time elapsed 2.610000
pi=3.14159265358977268789
difference is=-0.00000000000002042810
total time elapsed 0.430000