[petsc-dev] Fwd: MatSetValues with v=0

Eric Chamberland Eric.Chamberland at giref.ulaval.ca
Thu Apr 17 15:01:13 CDT 2014


On 04/17/2014 03:47 PM, Jed Brown wrote:
> Eric Chamberland <Eric.Chamberland at giref.ulaval.ca> writes:
>> Now I noticed another thing while measuring performances (notice: I used
>> a PETSc compiled with debugging=yes... please don't flame me...):
>>
>> The first assembly for a 549252 square matrix takes me 4.505s but if i
>> sort the indices passed to MAT_SET_VALUES (which I can do since I add
>> only zeros) it takes only 1.655s!!!!!  Sorting the indices costs me only
>> 0.4s...
>
> How many nonzeros per row?  If you pass unsorted entries to the first
> assembly, insertion/row management will degrade from O(nnz*log(nnz)) to
> O(nnz^2).  This doesn't matter for short rows.
>

Mostly 52 nz per rows.

Total nz is 28 086 003;

> Meanwhile, PETSc does not know if you pass all entries for a row in one
> call or will be calling several times.  If you pass all the entries, it
> could make sense for _us_ to sort for you, but otherwise, it doesn't get
> around the more expensive row shifting.

This is exactly what I am doing: I pass all the entries for identical 
lines... (if any).

>
>> Is this a normal behavior?  If so, it means we shall number our DOF in a
>> way that the elementary matrices have DOF # that are mostly sorted while
>> doing the "standard" assembly?
>
> After the first assembly, it shouldn't make much difference, though
> there are mild optimizations we could make if people wanted to guarantee
> sorted input.  (It's not clear these matter; usually assembly is faster
> after the first time.)
>

ok.

Thank you!

Eric




More information about the petsc-dev mailing list