0

对不起,我不能发布任何源代码...

我有一个运行 GS 求解器的主/从红黑算法的代码。在简单的情况下,矩阵被分成 4 个大小均匀的计算块。图像 1-3 执行它们的计算部分,并将带有结果的缓冲区发送回图像 0。问题是这样的:

我已经 malloc 了一个足够大的数组来容纳所有的部分,以便我可以将单个结果映射回单个网格。问题似乎是在图像 0 上,在 MPI_Recv 调用之后,该进程不再知道网格被 malloc'd 用于保存整个事物。每当我尝试在该网格中放置一些东西时,都会出现错误。我发现唯一可行的解​​决方法是在所有进程上执行 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

我在这里先向您的帮助表示感谢

4

1 回答 1

2

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

于 2010-03-04T19:51:50.793 回答