Sie sind auf Seite 1von 3

Prime Number in parallel With Count and Time

#include<stdio.h>
#include"mpi.h"
void main(int argc,char *argv[])
{
int size, id,count=0;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &id);
MPI_Status status;
int master, last, i, worker;
master=0;
worker=size-1;
last=size-1;
int ds, s, e,n, t=0,j, ex,p[100];
double t1,t2,t3,t4,t5,t6,t7;
if(id==master)
{
printf("Enter Data Size:\n");
scanf("%d",&n);
ds=n/worker;
ex=n%worker;
t1=MPI_Wtime();
for(i=1;i<=last;i++)
{
s=(i-1)*ds+1;
e=s+ds-1;
if(i==last)
{
e=e+ex;
}
MPI_Send(&s, 1, MPI_INT,i,101,MPI_COMM_WORLD);
MPI_Send(&e, 1, MPI_INT,i,102,MPI_COMM_WORLD);
}
printf("The Total prime numbers found by processor are:");
for(i=1;i<=last;i++)
{
MPI_Recv(&t, 1, MPI_INT, i, 201, MPI_COMM_WORLD, &status);
MPI_Recv(&p[0], t, MPI_INT, i, 202, MPI_COMM_WORLD, &status);
count+=t;
for(j=0;j<t;j++)
{

printf("%d\n",p[j]);
}
}
printf("\nCount=%d\n",count);
t2=MPI_Wtime();
t3=t2-t1;
MPI_Recv(&t6,1,MPI_DOUBLE,last,301,MPI_COMM_WORLD,&status);
t7=t3-t6;
printf("Total time is %lf\n",t3);
printf("Total Computation time is %lf\n",t6);
printf("Total Communication time is %lf\n",t7);
}
else
{
int i,j,flag=0;
MPI_Recv(&s, 1, MPI_INT, 0,101,MPI_COMM_WORLD, &status);
MPI_Recv(&e, 1, MPI_INT, 0,102,MPI_COMM_WORLD, &status);
t4=MPI_Wtime();
for(i=s;i<=e;i++)
{
for(j=2;j<i;j++)
{
if((i%j)==0)
{
flag=1;
break;
}
}
if(flag==0)
{
p[t]=i;
t++;
}
flag=0;
}
t5=MPI_Wtime();
t6=t5-t4;
MPI_Send(&t, 1, MPI_INT, 0, 201, MPI_COMM_WORLD);
MPI_Send(&p[0], t, MPI_INT, 0, 202, MPI_COMM_WORLD);
if(id==last)
MPI_Send(&t6,1,MPI_DOUBLE,0,301,MPI_COMM_WORLD);

}
MPI_Finalize();
}

Das könnte Ihnen auch gefallen