我的并行积分计算程序中没有看到任何错误,但出现分段错误代码139,如何解决?

问题描述

我编写了一个程序,用于使用Manager-workers策略并行计算积分。

我遇到错误139(分段错误,但我不知道该在哪里出错。

我遇到错误139(分段错误,但我不知道该在哪里出错。

我遇到错误139(分段错误,但我不知道该在哪里出错。

这是我的代码

#include <iostream>
#include <cmath>
#include <cstdio>
#include <math.h>
#include "mpi.h"
using namespace std;

double f(double x){
return sqrt(2+pow(x,2))/((1+cos(2*x))*sqrt(1-x));
}


double adaptIsol(double left,double right,double eps)
{
double mid,h,Iold,Ileft,Iright,I; 

h = (right - left)/2; 
mid =(right + left)/2; 
Iold = h * (f(left) + f(right)); 
Ileft = h * (f(left) + f(mid))/2; 
Iright =h * (f(mid) + f(right))/2; 
I = Ileft + Iright; 

if(fabs(Iold - I) < eps)
    return I;
else
{     
    Ileft = adaptIsol(left,mid,eps/2); 
    Iright = adaptIsol(mid,right,eps/2); 
    cout<<Ileft+Iright<<endl;
    return Ileft + Iright; 
} 
}

int main(int argc,char *argv[])
{
int rank,size,n = 100000,s = 0;
double a = 0,b = 1.0,eps = 0.0001,I = 0.0,t;

MPI_Status st;

//start working with MPI
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);

h = (b - a)/n;
n --;

if(rank == 0) {//manager proc
    while(s != (size -1)){
        double Islave;
        MPI_Recv(&Islave,1,MPI_DOUBLE,MPI_ANY_SOURCE,MPI_ANY_TAG,MPI_COMM_WORLD,&st);
        I += Islave;
        MPI_Send(&n,MPI_INT,st.MPI_SOURCE,MPI_COMM_WORLD);
        if(n >= 0)
            n --;
        else
            s++;
    }
}
else {
    int m;
    while(1) {
        MPI_Send(&I,MPI_COMM_WORLD);
        MPI_Recv (&m,&st);
        
        if(m >= 0){
            I = adaptIsol(a + h * m,a + h * (m + 1),eps * h / (b - a)); 
        }
        else break;
    }
}
if(rank == 0) cout <<"Integral value: " << I <<endl;
MPI_Finalize();
return EXIT_SUCCESS;
[enter image description here][1]}
           

请帮助我找到错误 [1]:https://i.stack.imgur.com/olSIu.png

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)