[petsc-users] Petsc memory consumption keep increasing in my loop
Medane TCHAKOROM
medane.tchakorom at univ-fcomte.fr
Fri Sep 24 09:31:51 CDT 2021
Thanks Barry,
I can't share the orginal code i'am working on unfortunately.
But the example i wrote -- even if you do not that into account //SOME
CODE HERE .. part -- give me , by using PetscMallocDump, some
informations about memory that was not freed.
Based on the example code i sent, i was expecting that PetscMallocDump
give no output.
Médane
On 24/09/2021 16:13, Barry Smith wrote:
> The code you sent looks fine, it should not leak memory.
>
> Perhaps the /// SOME CODE HERE.... is doing something that prevents the matrix from being actually freed. PETSc uses reference counting on its objects so if another object keeps a reference to the matrix then the memory of the matrix will not be freed until the reference count drops back to zero. For example if a KSP has a reference to the matrix and the KSP has not been completely freed the matrix memory will remain.
>
> We would need to see the full code to understand why the matrix is not being freed.
>
> Barry
>
>
>> On Sep 24, 2021, at 10:08 AM, Medane TCHAKOROM <medane.tchakorom at univ-fcomte.fr> wrote:
>>
>> Hello,
>>
>> I have problem with a code i'am working on.
>>
>> To illustrate my problem, here is an example:
>>
>>
>> int main(int argc, char *argv[])
>> {
>>
>> PetscErrorCode ierr;
>>
>> ierr = PetscInitialize(&argc, &argv, (char *)0, NULL);
>> if (ierr)
>> return ierr;
>>
>> int i = 0;
>> for (i = 0; i < 1; i++)
>> {
>> Mat A;
>> ierr = MatCreate(PETSC_COMM_WORLD, &A);
>> CHKERRQ(ierr);
>> ierr = MatSetSizes(A, 16, 16, PETSC_DECIDE,PETSC_DECIDE);
>> CHKERRQ(ierr);
>> ierr = MatSetFromOptions(A);
>> CHKERRQ(ierr);
>> ierr = MatSetUp(A);
>> CHKERRQ(ierr);
>>
>>
>> ierr = MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY);
>> CHKERRQ(ierr);
>> ierr = MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY);
>> CHKERRQ(ierr);
>>
>>
>>
>> /// SOME CODE HERE....
>>
>> MatDestroy(&A);
>>
>>
>> }
>>
>>
>> FILE *fPtr;
>> fPtr = fopen("petsc_dump_file.txt", "a");
>> PetscMallocDump(fPtr);
>> fclose(fPtr);
>>
>> ierr = PetscFinalize();
>> CHKERRQ(ierr);
>>
>> return 0;
>> }
>>
>>
>>
>> The problem is , in the loop, the memory consumption keep increasing till the end of the program.
>>
>> I checked memory leak with PetscMallocDump, and found out that the problem may be due to matrix creation.
>>
>> I'am new to Petsc and i don't know if i'am doing something wrong. Thanks
>>
>>
>> Médane
>>
More information about the petsc-users
mailing list