使用malloc和MPI在C中是否存在问题?

时间:2010-03-04 19:38:26

标签: arrays malloc mpi

抱歉,我无法发布任何源代码......

我有一个为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

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

非常不可能是库错误。 没有看到源代码几乎不可能找到问题。 我猜你没有正确分配,或者用一些垃圾覆盖分配的指针。 要测试它,请在分配后立即打印指针值,并在mpi接收之前/之后打印。