Dear PETSc team, I have a question regarding the MatGetSubMatrix routine (release 3.0.0-p7). I am using it to change the partitioning of a MATMPIAIJ matrix:
ierr = MatGetSubMatrix(Aold,ISrow,IScol,PETSC_DECIDE,MAT_INITIAL_MATRIX,&Anew); Using the PetscMemoryGetCurrentUsage routine, I noticed that the memory size is increased by about 100% when calling MatGetSubMatrix: - memory usage : 267 MB ierr = MatGetSubMatrix(Aold,ISrow,IScol,PETSC_DECIDE,MAT_INITIAL_MATRIX,&Anew); - memory usage : 780 MB ierr = MatDestroy(Aold); - memory usage : 528 MB In order to reduce the memory, I have to duplicate Anew in the following way: - memory usage : 267 MB ierr = MatGetSubMatrix(Aold,ISrow,IScol,PETSC_DECIDE,MAT_INITIAL_MATRIX,&Anew);CHKERRQ(ierr); - memory usage : 780 MB ierr = MatDestroy(Aold); - memory usage : 528 MB ierr = MatDuplicate(Anew,MAT_COPY_VALUES,&Atemp);CHKERRQ(ierr); - memory usage : 780 MB ierr = MatDestroy(Anew);CHKERRQ(ierr); - memory usage : 278 MB Anew = Atemp; However, the peak memory is still about three times the size of Aold. Am I doing something wrong? Why is it using so much memory? Is there a way to avoid this memory peak? I noticed the same thing when using the release 3.1-p1 Thanks for your help, francois pacull.
