[petsc-users] calling both MatSeqAIJSetPreallocation and MatMPIAIJSetPreallocation

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


Thanks!

On Mon, Jan 11, 2021 at 2:40 PM Barry Smith <bsmith at petsc.dev> wrote:

>
>   Sam,
>
>     In the master development branch of PETSc Stefano has started to add
> support for directly providing matrix entries in "coordinate" form (COO)
> (the triple arrays you use).
>
>     It supports MatSetPreallocationCOO() and MatSetValuesCOO().
>
>     Currently Stefano has optimized it for use with GPUs but it will also
> work for CPUs and we can add optimizations in the future.
>
>     You might consider using these in your code instead of managing the
> setting of each value individually.
>
>     Barry
>
>
> On Jan 11, 2021, at 3:45 PM, Sam Guo <sam.guo at cd-adapco.com> wrote:
>
> Ok, thanks.
>
> On Mon, Jan 11, 2021 at 1:38 PM Matthew Knepley <knepley at gmail.com> wrote:
>
>> On Mon, Jan 11, 2021 at 4:32 PM Sam Guo <sam.guo at cd-adapco.com> wrote:
>>
>>> 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.
>>>
>>>
>> It is cheaper to insert many values than sequences of single values.
>> However, allocating memory is much much more expensive. As with most
>> performance questions, there is no substitute for experiments.
>>
>>   Thanks,
>>
>>      Matt
>>
>>
>>> 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/>
>>>>>
>>>>
>>
>> --
>> 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/79f62a22/attachment-0001.html>


More information about the petsc-users mailing list