程序在并行的时候出现下面的错误,单核运行没有错误
-
*** Error in ' DFrhoCentralFoam ': corrupted double-linked list: 0x0000000002069690 ***
[UbuntuL08311] *** Process received signal ***
[Ubuntu: 08311] signal: Aborted(6)
[Ubuntu: 08311] signal code: (-6)
下面是一样的,就是list后面的数字不一样,请问有谁遇到过这样的错误吗?网上看了一下说是内存错误,不晓得怎么回事?谢谢~ -
@Aeronastro 在 程序在并行的时候出现下面的错误,单核运行没有错误 中说:
有的processor的INLET是有面的,有的是没有面的,比如第N个proccessor中INLET的face数为0,是不是可能导致出错?
你赋值的时候是如何遍历的?
-
思路没问题,建议你用OpenFOAM的mpirunDebug来调试并行程序。
-
@wwzhao 我用xterm+valgrind模式进行调试,内容会多一些:
Memcheck, a memory error detector!是不是出现了内存错误
但这要怎么改呢?我的求解器是基于OF中的自带的求解器加了一点内容,上面的错误好像没有提到我自己编的地方这个图是一部分内容
我看到错误内容除了Invalid read of size 8之外,还有conditional jump or move depends on uninitialised value(s),4 bytes in 1 blocks are still reachable in loss record 1 of 4267,这里的1会一直增加,2 of 4267;3 of 4267 ....不知道这里的4 bytes是哪里的,可能没有释放掉。
-
@wwzhao 我没有用到operator new操作符。
我大部分代码还是of自己的,额外加的地方就是定义了两个类,两个个函数和一些全局变量,如下图:
单核运行是可以的话,代码应该问题不大吧?前两个是定义的两个类,第三个是一些变量(相当于全局变量),最后两个是定义的函数。为了方便,我都写成了#include 。
上面的Invalid read of size 8的错误我在OF自己的求解器并行算了一下,还是有这个,但是可以运行。我想应该不是我代码本身的问题。虽然不知道是什么原因,但这个错误应该不至于我的求解器算不下去。
我想问题就出现在了我之前提到的另外的那个错误,类似于4 bytes in 1 blocks are still reachable in loss record 1 of 4267。
-
@wwzhao 谢谢你的建议,昨天我试着找了一下。关于并行计算,各个processor都要执行求解器的.C文件,而我的求解器的一些语句并不完全适合于每个processor,其中就是找INLET边界,读出面心值,然后对面心值进行操作。我的分块中只有processor0的INLET有面,即nFaces不是0,其余processor的INLET的nFaces都是0,如果对面为0的processor做这样的面心操作,是不是就有问题?所以我加了判断语句之后,processor1,2,3...就没有那个问题了,但是在processor0又出现新的问题,我还在找。
不知道我上面说的对不对