Segfault с оператором () для KiFMM при использовании MPI

Я использую KiFMM и PETSc для моего кода. У него не было проблем с последовательной версией, но когда я пытаюсь использовать MPI с 2 узлами, я получаю сообщение об ошибке в (*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

Решение

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

Это показывает, что вы звоните operator() через NULL-указатель trgPos это нулевой указатель. Вы должны изучить код и проследить путь кода, который занимает каждый ранг. Должно быть, что в некоторых случаях trgPos не инициализирован должным образом, или может произойти сбой оператора выделения памяти из-за нехватки памяти.

0

Другие решения


По вопросам рекламы [email protected]