On Tue, Dec 13, 2022 at 1:14 AM Yuyun Yang <yyan...@alumni.stanford.edu> wrote:
> Here is the error message: > > Program received signal SIGSEGV, Segmentation fault. > 0x00005555555e73b7 in kronConvert (left=..., right=..., > mat=@0x555555927e10: 0x555557791bb0, diag=5, offDiag=0) > at /home/yuyun/scycle-2/source/spmat.cpp:265 > 265 kronConvert_symbolic(left,right,mat,d_nnz,o_nnz); > d_nnz and o_nnz are pointers, and they are supposed to hold arrays of the number of nonzero in each row, You seem to be passing integers. Thanks, Matt > On Tue, Dec 13, 2022 at 12:41 PM Matthew Knepley <knep...@gmail.com> > wrote: > >> On Mon, Dec 12, 2022 at 9:56 PM Yuyun Yang <yyan...@alumni.stanford.edu> >> wrote: >> >>> Hello team, >>> >>> >>> >>> I’m debugging my code using gdb. The program runs just fine if I don’t >>> debug it, but when I use gdb, it seg faults at a place where it never >>> experienced any seg fault when I debugged it 1-2 years ago. I wonder if >>> this might be caused by the PETSc version change? >>> >> >> The only PETSc calls are the MatGetOwnershipRange() calls, which have not >> changed, so I think this is unlikely. >> >> >>> Or something wrong with gdb itself? I’ve included the code block that is >>> problematic for you to take a look at what might be wrong – seg fault >>> happens when this function is called. For context, Spmat is a class of >>> sparse matrices in the code: >>> >> >> What is the debugger output? >> >> Thanks, >> >> Matt >> >> >>> // calculate the exact nonzero structure which results from the >>> kronecker outer product of left and right >>> >>> >>> // d_nnz = diagonal nonzero structure, o_nnz = off-diagonal nonzero >>> structure >>> >>> void kronConvert_symbolic(const Spmat &left, const Spmat &right, Mat & >>> mat, PetscInt* d_nnz, PetscInt* o_nnz) >>> >>> >>> { >>> >>> >>> size_t rightRowSize = right.size(1); >>> >>> >>> size_t rightColSize = right.size(2); >>> >>> >>> >>> >>> >>> PetscInt Istart,Iend; // rows owned by current processor >>> >>> >>> PetscInt Jstart,Jend; // cols owned by current processor >>> >>> >>> >>> >>> >>> // allocate space for mat >>> >>> >>> MatGetOwnershipRange(mat,&Istart,&Iend); >>> >>> >>> MatGetOwnershipRangeColumn(mat,&Jstart,&Jend); >>> >>> >>> PetscInt m = Iend - Istart; >>> >>> >>> >>> >>> >>> for (int ii=0; ii<m; ii++) { d_nnz[ii] = 0; } >>> >>> >>> for (int ii=0; ii<m; ii++) { o_nnz[ii] = 0; } >>> >>> >>> >>> >>> >>> // iterate over only nnz entries >>> >>> >>> Spmat::const_row_iter IiL,IiR; >>> >>> >>> Spmat::const_col_iter JjL,JjR; >>> >>> >>> double valL=0, valR=0, val=0; >>> >>> >>> PetscInt row,col; >>> >>> >>> size_t rowL,colL,rowR,colR; >>> >>> >>> >>> >>> // loop over all values in left >>> >>> >>> for (IiL=left._mat.begin(); IiL!=left._mat.end(); IiL++) { >>> >>> >>> for (JjL=(IiL->second).begin(); JjL!=(IiL->second).end(); JjL++) { >>> >>> >>> rowL = IiL->first; >>> >>> >>> colL = JjL->first; >>> >>> >>> valL = JjL->second; >>> >>> >>> if (valL==0) { continue; } >>> >>> >>> >>> >>> >>> // loop over all values in right >>> >>> >>> for (IiR=right._mat.begin(); IiR!=right._mat.end(); IiR++) { >>> >>> >>> for (JjR=(IiR->second).begin(); JjR!=(IiR->second).end(); >>> JjR++) { >>> >>> rowR = IiR->first; >>> >>> >>> colR = JjR->first; >>> >>> >>> valR = JjR->second; >>> >>> >>> >>> >>> >>> // the new values and coordinates for the product matrix >>> >>> >>> val = valL*valR; >>> >>> >>> row = rowL*rightRowSize + rowR; >>> >>> >>> col = colL*rightColSize + colR; >>> >>> >>> >>> >>> >>> PetscInt ii = row - Istart; // array index for d_nnz and >>> o_nnz >>> >>> if (val!=0 && row >= Istart && row < Iend && col >= Jstart && >>> col < Jend) { d_nnz[ii]++; \ >>> >>> } >>> >>> >>> if ( (val!=0 && row >= Istart && row < Iend) && (col < Jstart >>> || col >= Jend) ) { o_nnz[i\ >>> >>> i]++; } >>> >>> >>> } >>> >>> >>> } >>> >>> >>> } >>> >>> >>> } >>> >>> >>> } >>> >>> >>> >>> >>> >>> >>> >>> Thank you, >>> >>> Yuyun >>> >> >> >> -- >> What most experimenters take for granted before they begin their >> experiments is infinitely more interesting than any results to which their >> experiments lead. >> -- Norbert Wiener >> >> https://www.cse.buffalo.edu/~knepley/ >> <http://www.cse.buffalo.edu/~knepley/> >> > -- What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead. -- Norbert Wiener https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>