C で使用して、 npts要素を持つphiMPI_Reduce()
というベクトルを計算しようとしています。そのために、長いベクトル ( longvec ) のチャンクを各プロセスに割り当て、これらのチャンクを個別に合計し、最後にプロセス 0 で各プロセッサの部分的な結果を合計して、phi の各要素の推定値を取得します。
私は非常にばかげた結果を得ています...以下のコードで私が犯している間違いを誰か教えてもらえますか?
double phie[npts];
phitemp = (double*) malloc (nprocs * sizeof(double));
for (i = 0; i < npts; i++) {
phitemp[rank] = 0;
for (x = rank * 10 + 1; x <= (rank + 1) * 10; x++) {
phitemp[rank] = phitemp[rank] + longvec[x] * vector[i]; }
}
MPI_Reduce(phitemp, & (((double *) phivec)[i]), 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);
}