我想将n*n
矩阵均匀地分发到所有处理器,以便每个处理器使用MPI_Sendrecv()
从主处理器接收(n /处理器)行。但是,我一直收到错误,终端冻结了。以下是我的代码的一部分:
MPI_Comm_rank(MPI_COMM_WORLD, &Rank);
MPI_Comm_size(MPI_COMM_WORLD, &Proc);
MPI_Status status[Proc];
int **Matrix;
Matrix= malloc(n * sizeof(int *));
for (int i = 0; i < n; i++) {
Matrix[i] = malloc(n * sizeof(int));
}
int chunk = n/Proc;
for(i=0; i<Proc ;i++) {
k = i*chunk;
k1 = (i+1)*chunk;
for(j=k;j<k1;j++) {
MPI_Sendrecv(Matrix[j], n, MPI_INT, i, TAG,
Matrix[j], n, MPI_INT, i, TAG,
MPI_COMM_WORLD, &status[i]);
}
}
注意到,我故意逐行发送,因为我声明**Matrix
以便使用传统方法维持对每个元素的正常访问,即Matrix[i][j]
。你们建议有什么解决方法吗?