1. 程式人生 > >求助,請進來看一個簡單的MPI程式

求助,請進來看一個簡單的MPI程式

是《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); 
   
return0;
}

 現要求編寫一個使用矩形規則在100000個區間的並行程式計算pi;

我的程式如下,

#include <mpi.h>
#include 
<stdio.h>
#include 
<math.h>#define intervals 1000000double 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();
      
return0;
}

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程式不知道是哪裡出錯了呢、