【发布时间】:2017-04-03 01:45:08
【问题描述】:
在使用笛卡尔拓扑计算将矩阵与向量相乘之后。我得到了他们的等级和向量的以下过程。
P0 (process with rank = 0) =[2 , 9].
P1 (process with rank = 1) =[2 , 3]
P2 (process with rank = 2) =[1 , 9]
P3 (process with rank = 3) =[4 , 6].
现在。我需要分别对偶数进程和奇数进程的元素求和,如下所示:
temp1 = [3 , 18]
temp2 = [6 , 9]
然后,将结果收集到不同的向量中,如下所示:
结果 = [3 , 18 , 6 , 9]
我的尝试是使用 MPI_Reduce,然后像这样使用 MPI_Gather:
// Previous code
double* temp1 , *temp2;
if(myrank %2 == 0){
BOOLEAN flag = Allocate_vector(&temp1 ,local_m); // function to allocate space for vectors
MPI_Reduce(local_y, temp1, local_n, MPI_DOUBLE, MPI_SUM, 0 , comm);
MPI_Gather(temp1, local_n, MPI_DOUBLE, gResult, local_n, MPI_DOUBLE,0, comm);
free(temp1);
}
else{
Allocate_vector(&temp2 ,local_m);
MPI_Reduce(local_y, temp2, local_n , MPI_DOUBLE, MPI_SUM, 0 , comm);
MPI_Gather(temp2, local_n, MPI_DOUBLE, gResult, local_n, MPI_DOUBLE, 0,comm);
free(temp2);
}
但答案不正确。似乎代码将偶数和奇数过程的所有元素相加,然后给出了分段错误错误: 错误结果 = [21 15 0 0] 还有这个错误
**
./test': double free or corruption (fasttop): 0x00000000013c7510 *** *** Error in./test' 中的错误:双重释放或损坏(fasttop):0x0000000001605b60 ***
【问题讨论】:
标签: c++ parallel-processing mpi