これは非常に奇妙な問題だと思います: 私はこのコードを持っています: サイズ チャンクと幅の 2D マトリックスを受け取ることになっています。行列は以下を使用して割り当てられます:
int **alloc2d(int n, int m) {
int i = 0;
int *data = malloc(n * m * sizeof(int));
int **array = malloc(n * sizeof(int *));
for (i = 0; i < n; i++) {
array[i] = &(data[i * m]);
}
return array;
}
したがって、それは連続メモリブロックです。
私は次のコードを持っています:
MPI_Status st;
int worker;
for(i = 1; i < size; i++) {
MPI_Recv(&(recmat[0][0]), chunk*width, MPI_INT, MPI_ANY_SOURCE, 1,
MPI_COMM_WORLD, &st);
worker = st.MPI_SOURCE;
/* for(k = worker * chunk; k < (worker + 1) * chunk; k++){
for(j = 0; j < width; j++) {
mat[k][j] = recmat[k - worker * chunk][j];
}
}*/
}
コードがこのようなものである場合、すべてが停止し、正常に動作します。リージョンのコメントを外すと:
for(k = worker * chunk; k < (worker + 1) * chunk; k++){
for(j = 0; j < width; j++) {
mat[k][j] = recmat[k - worker * chunk][j];
}
}
このコードを実行しているスレッドは停止しません。これについての論理的な説明が見つかりません。おそらく、誰かがエラーまたは問題を確認できます。ありがとうございました!
recmat 割り当てとチャンク計算:
int **recmat;
recmat = alloc2d(chunk,width);
int chunk;
chunk = height / size;