是《MPI与OpenMP并行程序设计-C语言版》的作业;91页里面习题4.11:
通过计算在曲线下图形的面积来计算pi,一个简单的方法是使用矩形规则,将区间【0,1】分成k个等长子区间。用这些高度可以构造k个矩形。这些矩形的面积逼近曲线下图形的面积。
如下是课文中的C程序
#define
intervals 1000000
int main( int argc, char * argv[])
... {
double area;
double ysum;
double xi;
int i;
ysum=0.0;
for(i=0;i<intervals;i++)
...{
xi=(1.0/intervals)*(i+0.5);
ysum+=4.0/(1.0+xi*xi);
}
area=ysum*(1.0/intervals);
printf("Area is %f ",area);
return 0;
}
int main( int argc, char * argv[])
... {
double area;
double ysum;
double xi;
int i;
ysum=0.0;
for(i=0;i<intervals;i++)
...{
xi=(1.0/intervals)*(i+0.5);
ysum+=4.0/(1.0+xi*xi);
}
area=ysum*(1.0/intervals);
printf("Area is %f ",area);
return 0;
}
现要求编写一个使用矩形规则在100000个区间的并行程序计算pi;
我的程序如下,
#include
<
mpi.h
>
#include < stdio.h >
#include < math.h >
#define intervals 1000000
double area,aa;
int main( int argc, char * argv[])
{ int id; /* Process rank */
int p; /* Number of Processes */
int i;
void pi( int , int );
MPI_Init( & argc, & argv);
MPI_Comm_rank(MPI_COMM_WORLD, & id);
MPI_Comm_size(MPI_COMM_WORLD, & p);
for (i = id;i < intervals;i += p)
{pi(id,i);
aa += area;}
printf( " Area is %f " ,aa);
MPI_Finalize();
return 0 ;
}
void pi( int id, int z){
double ysum;
double xi;
ysum = 0.0 ;
xi = ( 1.0 / intervals) * (z + 0.5 );
ysum = 4.0 / ( 1.0 + xi * xi);
area = ysum * ( 1.0 / intervals);
}
#include < stdio.h >
#include < math.h >
#define intervals 1000000
double area,aa;
int main( int argc, char * argv[])
{ int id; /* Process rank */
int p; /* Number of Processes */
int i;
void pi( int , int );
MPI_Init( & argc, & argv);
MPI_Comm_rank(MPI_COMM_WORLD, & id);
MPI_Comm_size(MPI_COMM_WORLD, & p);
for (i = id;i < intervals;i += p)
{pi(id,i);
aa += area;}
printf( " Area is %f " ,aa);
MPI_Finalize();
return 0 ;
}
void pi( int id, int z){
double ysum;
double xi;
ysum = 0.0 ;
xi = ( 1.0 / intervals) * (z + 0.5 );
ysum = 4.0 / ( 1.0 + xi * xi);
area = ysum * ( 1.0 / intervals);
}
编译之后执行不了,菜鸟的sb程序不知道是哪里出错了呢、