抱歉,我无法发布任何源代码......
我有一个为G.S.求解器运行主/从红黑算法的代码。在简单的情况下,矩阵被分成4个大小均匀的计算块。图像1-3执行它们的部分计算,并将结果缓冲区发送回图像0.问题是:
我有一个大小足以容纳所有碎片的数组,以便我可以将单个结果映射回单个网格。问题似乎是在图像0上,在MPI_Recv调用之后,该进程不再意识到网格是用于保存整个事物的malloc。每当我尝试在网格中添加某些内容时,我都会收到错误消息。我发现唯一的解决方法是在所有进程上执行malloc,并在MPI_Recv之前再次为进程零执行malloc。
为什么它似乎失去了对之前分配的内存的引用?
在伪代码中:
Malloc whole[][] Have to have this allocated
Malloc partial[]
Perform compute on whole[]
If(image!= 0) MPI_Send(whole[])
Else (if image==0)
Malloc whole[][] again! and this allocated otherwise the problem happens
Loop over other images
MPI_Recv(partial)
Put partial[] into whole[][] Here is where the problem occurs
Endif
感谢您的帮助
答案 0 :(得分:2)
非常不可能是库错误。 没有看到源代码几乎不可能找到问题。 我猜你没有正确分配,或者用一些垃圾覆盖分配的指针。 要测试它,请在分配后立即打印指针值,并在mpi接收之前/之后打印。