使用 MPI Scatter 分配数字 - 错误
Distribute numbers with MPI Scatter - error
我做了一个简单的例子来理解 MPI_Scatter
是如何工作的。我想为每个进程分配两个整数。
但我总是遇到分段错误。我的代码有什么问题。
void do_work(int val, int rank){
printf("I am rank number %d and i got the randval %d.\n",rank,val);
}
int main(int argc, char** argv){
MPI_Init(&argc,&argv);
int size, rank;
MPI_Comm_rank(MPI_COMM_WORLD, &size);
MPI_Comm_size(MPI_COMM_WORLD, &rank);
int M=2;
int N = M*size;
int * input;
int * recv;
if(rank==0){
input = (int*)calloc(N, sizeof(int));
for(int i=0;i<N; ++i) input[i]=10 + i;
}
recv = (*int)calloc(M, sizeof(int));
MPI_Scatter(&input[0], M, MPI_INT,&recv[0],M, MPI_INT, 0, MPI_COMM_WORLD);
for(int i=0; i<M; ++i) do_work(recv[i],rank);
free(input);
free(recv);
MPI_Finalize();
return 0;
}
我认为你的问题来自:
int size, rank;
MPI_Comm_rank(MPI_COMM_WORLD, &size);
MPI_Comm_size(MPI_COMM_WORLD, &rank);
rand
和size
调换了,应该是:
int size, rank;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
我做了一个简单的例子来理解 MPI_Scatter
是如何工作的。我想为每个进程分配两个整数。
但我总是遇到分段错误。我的代码有什么问题。
void do_work(int val, int rank){
printf("I am rank number %d and i got the randval %d.\n",rank,val);
}
int main(int argc, char** argv){
MPI_Init(&argc,&argv);
int size, rank;
MPI_Comm_rank(MPI_COMM_WORLD, &size);
MPI_Comm_size(MPI_COMM_WORLD, &rank);
int M=2;
int N = M*size;
int * input;
int * recv;
if(rank==0){
input = (int*)calloc(N, sizeof(int));
for(int i=0;i<N; ++i) input[i]=10 + i;
}
recv = (*int)calloc(M, sizeof(int));
MPI_Scatter(&input[0], M, MPI_INT,&recv[0],M, MPI_INT, 0, MPI_COMM_WORLD);
for(int i=0; i<M; ++i) do_work(recv[i],rank);
free(input);
free(recv);
MPI_Finalize();
return 0;
}
我认为你的问题来自:
int size, rank;
MPI_Comm_rank(MPI_COMM_WORLD, &size);
MPI_Comm_size(MPI_COMM_WORLD, &rank);
rand
和size
调换了,应该是:
int size, rank;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);