MPI实现蒙特卡洛法求圆周率

#include
#include
#include
#include
#include
#define N 100000000
using namespace std;
int get_circle_sum(int n)
{
double x,y;
int sum=0;
srand(time(NULL));
for(int i=0;i {
x=(double)rand()/RAND_MAX;
y=(double)rand()/RAND_MAX;
double square_sum=x*x+y*y;
if(square_sum<=1)
{
sum+=1;
}
}
return sum;
}
int main(int argc,char** argv)
{
int size,rank;
MPI_Status status;
MPI_Init(&argc,&argv);
     MPI_Comm_size(MPI_COMM_WORLD,&size);
     MPI_Comm_rank(MPI_COMM_WORLD,&rank);
int n=N/size;
int true_n;
double start , finish;
int sum;
MPI_Barrier(MPI_COMM_WORLD);
start = MPI_Wtime();
if(N%size!=0)
{
if(rank==0)
{
int n_other=n+1;
for(int i=1;i MPI_Send(&n_other,1,MPI_INT,i,0,MPI_COMM_WORLD);
for(int i=N%size;i MPI_Send(&n,1,MPI_INT,i,0,MPI_COMM_WORLD);
true_n=n_other;
}
else
MPI_Recv(&true_n,1,MPI_INT,0,0,MPI_COMM_WORLD,&status);
}
else
{
if(rank==0)
{
for(int i=1;i                  MPI_Send(&n,1,MPI_INT,i,0,MPI_COMM_WORLD);
true_n=n;
}
else
                        MPI_Recv(&true_n,1,MPI_INT,0,0,MPI_COMM_WORLD,&status);
}
sum=get_circle_sum(true_n);
MPI_Barrier(MPI_COMM_WORLD);
finish = MPI_Wtime();
int true_sum;
MPI_Reduce(&sum,&true_sum,1,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD);
if(rank==0)
{
double pi=(double)true_sum/N*4;
cout<<"run time:"< cout<<"the result pi is "< }
MPI_Finalize();
return 0;
}
 

你可能感兴趣的:(c++)