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

Sharing an array of integers in MPI (C++)

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

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;

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

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

将该代码移到 if/else 块之外。对所有级别都是一样的调用。