[petsc-users] parallelize matrix assembly process

Junchao Zhang junchao.zhang at gmail.com
Mon Dec 12 10:42:58 CST 2022


Since you run with multiple ranks, you should use matrix type mpiaij and
MatMPIAIJSetPreallocation. If preallocation is difficult to estimate, you
can use MatPreallocator, see an example at
https://gitlab.com/petsc/petsc/-/blob/main/src/mat/tests/ex230.c

--Junchao Zhang


On Mon, Dec 12, 2022 at 5:16 AM 김성익 <ksi2443 at gmail.com> wrote:

> Hello,
>
>
> I need some keyword or some examples for parallelizing matrix assemble
> process.
>
> My current state is as below.
> - Finite element analysis code for Structural mechanics.
> - problem size : 3D solid hexa element (number of elements : 125,000),
> number of degree of freedom : 397,953
> - Matrix type : seqaij, matrix set preallocation by using
> MatSeqAIJSetPreallocation
> - Matrix assemble time by using 1 core : 120 sec
>    for (int i=0; i<125000; i++) {
>     ~~ element matrix calculation}
>    matassemblybegin
>    matassemblyend
> - Matrix assemble time by using 8 core : 70,234sec
>   int start, end;
>   VecGetOwnershipRange( element_vec, &start, &end);
>   for (int i=start; i<end; i++){
>    ~~ element matrix calculation
>    matassemblybegin
>    matassemblyend
>
>
> As you see the state, the parallel case spent a lot of time than
> sequential case..
> How can I speed up in this case?
> Can I get some keyword or examples for parallelizing assembly of matrix in
> finite element analysis ?
>
> Thanks,
> Hyung Kim
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20221212/1e1b620c/attachment.html>


More information about the petsc-users mailing list