1

我正在尝试在 C 中使用npts元素MPI_Reduce()来计算一个名为phi的向量。为此,我为每个进程分配了长向量 ( 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); 
} 
4

0 回答 0