これは非常にばかげた質問になる可能性がありますが、このコードに間違いが見当たりません... 出力が間違っています。ランク 1 は次のように表示されます。
3.000000 - 3.000000 - 3.000000 - 3.000000 - 3.000000 - 3.000000 - 3.000000 - 3.000000 - 3.000000 - 3.000000 - 3.000000 -
3.000000 - 3.000000 - 3.000000 - 3.000000 -
3.000000 - 3.000000 - 3.000000
- 3.000000 - 3.000000 -
3.000000 - 0.000000 - 0.000000 - 0.000000 - 0.000000 -
Bcast の代わりに MPI_Recv を使用する必要があります...しかし、何が起こっているのでしょうか? =/ それは私の malloc ですか? または、MPI_Recv を使用してマトリックス全体を送信することはできませんか? 配列全体が別のプロセスに移動しないのはなぜですか?
#include <stdio.h>
#include <stdlib.h>
#include "mpi.h"
int main(int argc, char **argv){
int rank, size;
int lines, cols;
int i, j;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Status status;
lines = 5;
cols = 5;
if(rank == 0){
double** array = (double**) malloc(lines*sizeof(double*));
for(i=0; i<lines; i++)
array[i] = (double*) malloc(cols*sizeof(double));
for(i=0; i<lines; i++)
for(j=0; j<cols; j++)
array[i][j] = 3;
for(i=0; i<lines; i++){
for(j=0; j<cols; j++)
printf("%f - ", array[i][j]);
printf("\n");
}
MPI_Send(&array[0][0], lines*cols, MPI_DOUBLE, 1, 0, MPI_COMM_WORLD);
}
else{
double** arrayNew = (double**)malloc(lines*sizeof(double*));
for (i=0; i<lines; i++)
arrayNew[i] = (double*) malloc(cols*sizeof(double));
MPI_Recv(&arrayNew[0][0], lines*cols, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, &status);
for(i=0; i<lines; i++){
for(j=0; j<cols; j++)
printf("%f - ", arrayNew[i][j]);
printf("\n");
}
}
MPI_Finalize();
}