[petsc-users] MatCreate performance

Mark Adams mfadams at lbl.gov
Mon Mar 11 08:36:54 CDT 2019


The PETSc logs print the max time and the ratio max/min.

On Mon, Mar 11, 2019 at 8:24 AM Ale Foggia via petsc-users <
petsc-users at mcs.anl.gov> wrote:

> Hello all,
>
> Thanks for your answers.
>
> 1) I'm working with a matrix with a linear size of 2**34, but it's a
> sparse matrix, and the number of elements different from zero is
> 43,207,072,74. I know that the distribution of these elements is not
> balanced between the processes, the matrix is more populated in the middle
> part.
>
> 2) I initialize Slepc. Then I create the basis elements of the system
> (this part does not involve Petsc/Slepc, and every process is just
> computing -and owns- an equal amount of basis elements). Then I call:
> ierr = MatCreate(PETSC_COMM_WORLD, &A); CHKERRQ(ierr);
> ierr = MatSetType(A, MATMPIAIJ); CHKERRQ(ierr);
> ierr = MatSetSizes(A, PETSC_DECIDE, PETSC_DECIDE, size, size);
> CHKERRQ(ierr);
> ierr = MatMPIAIJSetPreallocation(A, 0, d_nnz, 0, o_nnz); CHKERRQ(ierr);
> ierr = MatZeroEntries(A); CHKERRQ(ierr);
> After this, I compute the elements of the matrix and set the values with
> MatSetValues. The I call EPSSolve (with KrylovSchur and setting the type as
> EPS_HEP).
>
> 3) There are a few more things that are strange to me. I measure the
> execution time of these parts both with a PetscLogStage and with a
> std::chrono (in nanoseconds) clock. I understand that the time given by the
> Log is an average over the processes right? In the case of the std::chrono,
> I'm only printing the times from process 0 (no average over processes).
> What I see is the following:
>                              1024 procs          2048 procs       4096
> procs        8192 procs
>                              Log       std          Log       std
> Log       std        Log       std
> MatCreate            68.42   122.7      67.08    121.2   62.29    116
>    73.36    127.4
> preallocation        140.36  140.3     76.45     76.45   40.31
> 40.3      21.13     21.12
> MatSetValues       237.79  237.7     116.6    116.6    60.59    60.59
> 35.32    35.32
> ESPSolve             162.8    160        95.8       94.2     62.17
> 60.63     41.16    40.24
>
> - So, all the times (including the total execution time that I'm not
> showing here) are the same between PetscLogStage and the std::chrono clock,
> except for the part of MatCreate. Maybe that part is very unbalanced?
> - The time of the MatCreate given by the PetscLogStage is not changing.
>
> Ale
>
> El vie., 8 mar. 2019 a las 17:00, Jed Brown (<jed at jedbrown.org>) escribió:
>
>> This is very unusual.  MatCreate() does no work, merely dup'ing a
>> communicator (or referencing an inner communicator if this is not the
>> first PetscObject on the provided communicator).  What size matrices are
>> you working with?  Can you send some performance data and (if feasible)
>> a reproducer?
>>
>> Ale Foggia via petsc-users <petsc-users at mcs.anl.gov> writes:
>>
>> > Hello all,
>> >
>> > I have a problem with the scaling of the MatCreate() function. I wrote a
>> > code to diagonalize sparse matrices and I'm running it in parallel. I've
>> > observed a very bad speedup of the code and it's given by the MatCreate
>> > part of it: for a fixed matrix size, when I increase the number of
>> > processes the time taken by the function also increases. I wanted to
>> know
>> > if you expect this behavior or if maybe there's something wrong with my
>> > code. When I go to (what I consider) very big matrix sizes, and
>> depending
>> > on the number of mpi processes, in some cases, MatCreate takes more time
>> > than the time the solver takes to solve the system for one eigenvalue or
>> > the time it takes to set up the values.
>> >
>> > Ale
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20190311/236003bd/attachment.html>


More information about the petsc-users mailing list