[petsc-users] calling both MatSeqAIJSetPreallocation and MatMPIAIJSetPreallocation

Sam Guo sam.guo at cd-adapco.com
Mon Jan 11 15:31:58 CST 2021


A follow up question: if I call preallocation, is there any
performance difference between

MatSetValues <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatSetValues.html#MatSetValues>(mat,1,&I,1,&J,&v,INSERT_VALUES
<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/INSERT_VALUES.html#INSERT_VALUES>);
// insert value one by one

vs

MatSetValues <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatSetValues.html#MatSetValues>(Mat
<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/Mat.html#Mat>
mat,PetscInt <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PetscInt.html#PetscInt>
m,const PetscInt
<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PetscInt.html#PetscInt>
idxm[],PetscInt
<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PetscInt.html#PetscInt>
n,const PetscInt
<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PetscInt.html#PetscInt>
idxn[],const PetscScalar
<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PetscScalar.html#PetscScalar>
v[],InsertMode <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/InsertMode.html#InsertMode>
addv) // insert multiple values

My input is triple arrays

vector<int> r;

vector<int> c;

vector<double> a;

where r/c are not sorted by rows/cols. I don't want to waste
memory/time to create idxm/idxn unless there is a performance penalty.


Thanks,

Sam



On Mon, Jan 11, 2021 at 12:27 PM Sam Guo <sam.guo at cd-adapco.com> wrote:

> Thanks!
>
> On Mon, Jan 11, 2021 at 12:25 PM Matthew Knepley <knepley at gmail.com>
> wrote:
>
>> On Mon, Jan 11, 2021 at 3:00 PM Sam Guo <sam.guo at cd-adapco.com> wrote:
>>
>>> Dear PETSc Dev Team,
>>>    The documentation recommends calling  both of the above preallocation
>>> routines for simplicity. Do we waste memory by calling both?
>>>
>>
>> No. Only one will function, depending on the matrix type.
>>
>>   Thanks,
>>
>>      Matt
>>
>>
>>> Thanks,
>>> Sam
>>> MATAIJMATAIJ
>>> <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MATAIJ.html#MATAIJ> =
>>> "aij" - A matrix type to be used for sparse matrices. This matrix type is
>>> identical to MATSEQAIJ
>>> <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MATSEQAIJ.html#MATSEQAIJ> when
>>> constructed with a single process communicator, and MATMPIAIJ
>>> <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MATMPIAIJ.html#MATMPIAIJ> otherwise.
>>> As a result, for single process communicators, MatSeqAIJSetPreallocation
>>> <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatSeqAIJSetPreallocation.html#MatSeqAIJSetPreallocation> is
>>> supported, and similarly MatMPIAIJSetPreallocation
>>> <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatMPIAIJSetPreallocation.html#MatMPIAIJSetPreallocation>()
>>> is supported for communicators controlling multiple processes. It is
>>> recommended that you call both of the above preallocation routines for
>>> simplicity.
>>>
>>
>>
>> --
>> 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/>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20210111/2093b76c/attachment-0001.html>


More information about the petsc-users mailing list