在MPI中共享整数数组(C ++)

时间:2017-03-18 19:32:36

标签: c++ arrays mpi broadcast

我正在尝试在C ++中使用MPI库时伪造共享内存。我有一个大小为n + 1的数组A,其中n是从用户给出的,并且处理器0生成该数组的整数。我需要与所有其他进程共享处理器0创建的数组。因此,我将它Bcast给其他人...但是当我让每个处理器打印出他们的阵列时,我从一个非零的处理器得到一个信号11(Segmentation Fault)。如果我评论该部分,它运行没有问题。我希望能够看到我的阵列已在所有处理器中正确发送和存储。

int *A=new int[n+1];
if(my_rank==0)
{
    srand(1251);
    A[0]=0;
    for(int i=1; i<=n; i++){
    A[i]=rand()%100;}
    MPI_Bcast(&A, n+1, MPI_INT, 0, MPI_COMM_WORLD);
}
else {

    MPI_Bcast(&A, n+1, MPI_INT, 0, MPI_COMM_WORLD);

    }

cout<<"My rank is "<<my_rank<<" and this is my array:"<<endl;
for (int i=0; i<=n; i++)
{cout<<A[i]<<" "<<endl;}
cout<<endl;

1 个答案:

答案 0 :(得分:1)

您错误地将&A作为地址传递给MPI_Bcast。这是指针的地址,MPI需要数据的地址,即A

MPI_Bcast(A, n+1, MPI_INT, 0, MPI_COMM_WORLD);

将该代码移到if / else块之外。所有职级都是一样的呼吁。