我正在使用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
任何人都知道为什么会发生这种情况以及我能做些什么呢?
答案 0 :(得分:0)
NumMat<double>::operator() (this=0x0, i=0, j=0)
^^^^^^^^
这表明您通过NULL指针调用operator()
,并且应该已经提示您trgPos
是NULL指针。您应该检查代码并跟踪每个排名所采用的代码路径。必定是在某些情况下trgPos
未正确初始化,或者内存分配运算符可能由于内存不足而失败。