在 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
块之外。对所有级别都是一样的调用。
我正在尝试在 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
块之外。对所有级别都是一样的调用。