[petsc-users] How much memory does TS use (in terms of # of matrices)

Andrew Spott andrew.spott at gmail.com
Wed May 16 08:08:03 CDT 2012


Not until you pointed it out… :).  Though it probably should have been.  It was late.

Though I'm not sure how to fix that… should I do a MatDestroy(A) at the beginning of that function every time?.

Is *A a pointer to the last used matrix, should I just do the mat duplicate into A?

Thanks for the help,

-Andrew


On May 16, 2012, at 2:51 AM, Aron Ahmadia wrote:

> Umnn, I hope this isn't too obvious, but you're duplicating your matrix at every time step without freeing it and expecting that to not be a problem?
> 
> A
> 
> On Wed, May 16, 2012 at 9:01 AM, Andrew Spott <andrew.spott at gmail.com> wrote:
> I'm attempting to run some code with a rather large (>1GB) sparse matrix, and I keep getting kicked out of the que for what I believe is using too much memory.  The unfortunate thing is that as the steps go up, the memory usage seems to as well, which would normally indicate a memory leak.
> 
> But I'm not really doing anything that would lead to a memory leak, my jacobian is:
> 
> PetscErrorCode HamiltonianJ(TS timeStepContext, PetscReal t, Vec u, Mat *A, Mat *B, MatStructure *flag, void* context)
> {
>    Mat h;
>    PetscErrorCode  err;
>    Context         *cntx = (Context*)context;
>    PetscScalar     ef = eField(t, cntx->params);
>    //if (cntx->rank == 0) std::cout << "ef: " << ef;
> 
> 
>    err = MatDuplicate(cntx->energy_eigenstates,MAT_COPY_VALUES,&h);
>    err = MatAXPY(h, ef, cntx->dipole_matrix, DIFFERENT_NONZERO_PATTERN);
> 
>        err = MatAssemblyBegin(h, MAT_FINAL_ASSEMBLY);
>        err = MatAssemblyEnd(h, MAT_FINAL_ASSEMBLY);
> 
>        *A = h;
>    *flag = DIFFERENT_NONZERO_PATTERN;
> 
>    return err;
> }
> 
> And my Monitor function is:
> 
> PetscErrorCode Monitor(TS ts, PetscInt step, PetscReal t, Vec u, void *cntx)
> {
>    Context         *context = (Context*) cntx;
>    PetscErrorCode  ierr = 0;
>    PetscScalar     ef = eField(t, context->params);
> 
>    if (context->rank == 0 && context->progress) std::cout << step << ": " << t << " ef: " << ef << std::endl;
> 
>        return ierr;
> }
> 
> I looked at it with valgrind, and got a summary of:
> 
> ==24941== LEAK SUMMARY:
> ==24941==    definitely lost: 0 bytes in 0 blocks
> ==24941==    indirectly lost: 0 bytes in 0 blocks
> ==24941==      possibly lost: 1,291,626,491 bytes in 4,050 blocks
> ==24941==    still reachable: 1,795,550 bytes in 88 blocks
> ==24941==         suppressed: 0 bytes in 0 blocks
> 
> with a bunch of things like this:
> 
> ==24937== 757,113,160 bytes in 10 blocks are possibly lost in loss record 1,834 of 1,834
> ==24937==    at 0x4A05306: memalign (vg_replace_malloc.c:532)
> ==24937==    by 0x43083C: PetscMallocAlign(unsigned long, int, char const*, char const*, char const*
> , void**) (mal.c:30)
> ==24937==    by 0x434144: PetscTrMallocDefault(unsigned long, int, char const*, char const*, char co
> nst*, void**) (mtr.c:196)
> ==24937==    by 0x8641BF: MatSeqAIJSetPreallocation_SeqAIJ (aij.c:3550)
> ==24937==    by 0x861DBA: MatSeqAIJSetPreallocation(_p_Mat*, int, int const*) (aij.c:3493)
> ==24937==    by 0x9201B5: MatMPIAIJSetPreallocation_MPIAIJ (mpiaij.c:3209)
> ==24937==    by 0x922600: MatMPIAIJSetPreallocation(_p_Mat*, int, int const*, int, int const*) (mpiaij.c:3897)
> ==24937==    by 0x9315BA: MatAXPY_MPIAIJ(_p_Mat*, std::complex<double>, _p_Mat*, MatStructure) (mpiaij.c:2254)
> ==24937==    by 0x5A9828: MatAXPY(_p_Mat*, std::complex<double>, _p_Mat*, MatStructure) (axpy.c:39)
> ==24937==    by 0x405EF7: HamiltonianJ(_p_TS*, double, _p_Vec*, _p_Mat**, _p_Mat**, MatStructure*, void*) (in /home/becker/ansp6066/code/EnergyBasisSchrodingerSolver/bin/propagate)
> ==24937==    by 0x736441: TSComputeRHSJacobian(_p_TS*, double, _p_Vec*, _p_Mat**, _p_Mat**, MatStructure*) (ts.c:186)
> ==24937==    by 0x736D68: TSComputeRHSFunctionLinear(_p_TS*, double, _p_Vec*, _p_Vec*, void*) (ts.c:2541)
> 
> I imagine these are not actual memory errors, but I thought I'm not sure what is leaking, so I thought I would bring it to your attention.
> 
> I can attach the full valgrind output, but at 2mb, it is rather large, so I figured I would wait for someone to ask for it.
> 
> Any idea what the memory leak could be?  Am I doing something stupid?
> 
> Thanks for the help, as always.
> 
> -Andrew
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20120516/2dc2f2ac/attachment.htm>


More information about the petsc-users mailing list