[petsc-dev] MatGetFactor calling MatSetUp

Jed Brown jedbrown at mcs.anl.gov
Mon Apr 1 21:51:26 CDT 2013


Paul just had some code here that calls MatSetUp() in
MatGetFactor_seqaij_aijcusparse().

https://bitbucket.org/pmullowney/petsc-aijcusparse-icc/commits/565b4a4a9c73300d4d7010d4fbc5d561c0644b6e#Lsrc/mat/impls/aij/seq/seqcusparse/aijcusparse.cuT90

Of course this is not allowed (it doesn't make sense to set up the
matrix this early), and we can detect it because -malloc_test gives:

[ 0]736 bytes MatSeqAIJSetPreallocation_SeqAIJ() line 3551 in /home/jed/petsc/src/mat/impls/aij/seq/aij.c
      [0]  MatSeqAIJSetPreallocation_SeqAIJ() line 3551 in /home/jed/petsc/src/mat/impls/aij/seq/aij.c
      [0]  MatSetUp_SeqAIJ() line 2483 in /home/jed/petsc/src/mat/impls/aij/seq/aij.c
      [0]  MatSetUp() line 707 in /home/jed/petsc/src/mat/interface/matrix.c
      [0]  MatGetFactor_seqaij_cusparse() line 79 in /home/jed/petsc/src/mat/impls/aij/seq/seqcusparse/aijcusparse.cu
      [0]  MatGetFactor() line 3997 in /home/jed/petsc/src/mat/interface/matrix.c
      [0]  PCSetUp_ILU() line 161 in /home/jed/petsc/src/ksp/pc/impls/factor/ilu/ilu.c
      [0]  PCSetUp() line 868 in /home/jed/petsc/src/ksp/pc/interface/precon.c
      [0]  KSPSetUp() line 192 in /home/jed/petsc/src/ksp/ksp/interface/itfunc.c

... and a few more

The leak is caused because the factorization routines don't check
whether the matrix was already preallocated.

#1  0x00007ffff6762668 in MatILUFactorSymbolic_SeqAIJ_ilu0 (fact=0x9511ae0, A=0x94214d0, isrow=0x951d3d0, iscol=0x9521d10, info=0x94d23f8) at /home/jed/petsc/src/mat/impls/aij/seq/aijfact.c:1659
1659      ierr = PetscMalloc3(ai[n]+1,PetscScalar,&b->a,ai[n]+1,PetscInt,&b->j,n+1,PetscInt,&b->i);CHKERRQ(ierr);


This is not the best misuse behavior, but I certainly don't want to
silently deallocate because then the misuse would more easily go
undetected.

Is there a good place to raise an error for this sort of misuse?



More information about the petsc-dev mailing list