我正在尝试在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;
答案 0 :(得分:1)
您错误地将&A
作为地址传递给MPI_Bcast
。这是指针的地址,MPI需要数据的地址,即A
。
MPI_Bcast(A, n+1, MPI_INT, 0, MPI_COMM_WORLD);
将该代码移到if
/ else
块之外。所有职级都是一样的呼吁。