使用MPI时,使用operator()进行KiFMM的Segfault

时间:2015-05-21 22:07:29

标签: c++ parallel-processing mpi petsc

我正在使用KiFMM和PETSc代码。它对于串行版本没有问题,但是当我尝试使用2个节点的MPI时,我现在在(*trgPos)(j,i)收到错误,其类型为DblNumMat,如下所示: http://www.mrl.nyu.edu/~harper/kifmm3d/documentation/common/html/nummat_8hpp_18ed51e81f911a23442591467d7a83ca.html

gdb的回溯显示了这个:

 Program received signal SIGSEGV, Segmentation fault.
0x000000000070761e in NumMat<double>::operator() (this=0x0, i=0, j=0)
at /directory/src/Onepart/../../inc/KIFMM3D/common/nummat.hpp:101
101      assert( i>=0 && i<_m && j>=0 && j<_n );
 (gdb) bt
 #0  0x000000000070761e in NumMat<double>::operator() (this=0x0, i=0, j=0)
at /directory/src/Onepart/../../inc/KIFMM3D/common/nummat.hpp:101

任何人都知道为什么会发生这种情况以及我能做些什么呢?

1 个答案:

答案 0 :(得分:0)

NumMat<double>::operator() (this=0x0, i=0, j=0)
                            ^^^^^^^^

这表明您通过NULL指针调用operator(),并且应该已经提示您trgPos是NULL指针。您应该检查代码并跟踪每个排名所采用的代码路径。必定是在某些情况下trgPos未正确初始化,或者内存分配运算符可能由于内存不足而失败。