據我所知,MPI_Sendrecv
需要兩個不同的緩衝區發送和接收。我的下面的代碼發送(N/P)塊到P-1
處理器,但它不起作用,並給我一個凍結的屏幕。我想,以確保一切是正確的,但我看不出哪裏出了問題就在這裏(我省略了變量聲明,使之短)MPI_Sendrecv使用2D矩陣問題
int **M, **FinalM, **M0;
M = malloc(N * sizeof (int *));
for (i = 0; i < N; i++) {
M[i] = malloc(N * sizeof (int));
}
FinalM = malloc(N * sizeof (int *));
for (i = 0; i < N; i++) {
FinalM[i] = malloc(n * sizeof (int));
}
M0 = malloc(N/P * sizeof (int *));
for (i = 0; i < N/P; i++) {
M0[i] = malloc(N * sizeof (int));
}
c = N/P; // P is Number of Processors and N rows
if (rank == 0) {
for (i = 0; i < P; i++) {
k = i*c;
k1 = (i + 1) * c;
for (j = k; j < k1; j++) {
MPI_Sendrecv(M[j], N, MPI_INT, i, TAG, FinalM[j], N, MPI_INT, i, TAG, MPI_COMM_WORLD, &status[d]);
}
}
} else {
for (i = 0; i < (N/P); i++) {
MPI_Recv(M0[i], N, MPI_INT, 0, TAG, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
}
}
請,有人可以給我一個提示來解決這個問題? 謝謝。
我已經更新了代碼。 – Mike