← Back to team overview

dolfin team mailing list archive

Re: profiling an assembly

 

> On Sun, May 18, 2008 at 01:24:19PM -0500, Matthew Knepley wrote:
>> On Sat, May 17, 2008 at 9:40 AM, Johan Hoffman <jhoffman@xxxxxxxxxx>
>> wrote:
>> > If the petsc sparse matrix structure works as I expect; to insert/add
>> an
>> > element you go to the particular row and search all non-zero entries
>> of
>> > that row until you find your column. So the complexity would be =
>> #dofs x
>> > #row non-zero entries
>>
>> Not exactly. We maintain sorted columns, so the expected time for all
>> insertions
>> is smaller. The numbers that Murtazo gets do not match our own, which
>> suggests
>> to me that the wrapper is taking non-trivial time for these small
>> matrices.
>>
>>    Matt
>
> We might be doing something stupid in the wrapper (like giving PETSc
> the wrong options), but I'm pretty sure the overhead the wrapper adds
> when calling MatSetValues is small.
>
> Here's the full code for PETScMatrix::add():
>
> void PETScMatrix::add(const real* block,
>                       uint m, const uint* rows,
>                       uint n, const uint* cols)
> {
>   dolfin_assert(A);
>   MatSetValues(A,
>                static_cast<int>(m),
>                reinterpret_cast<int*>(const_cast<uint*>(rows)),
>                static_cast<int>(n),
>                reinterpret_cast<int*>(const_cast<uint*>(cols)),
>                block, ADD_VALUES);
> }
>
> This should be easy to check when profiling the code. Murtazo: What's
> the difference between PETScMatrix::add and MatSetValues?
>

I think there is no difference. When we call PETScMatrix::add it basically
calls MatSetValues. Or is it going something else there?

murtazo

> --
> Anders
>



Follow ups

References