With the following example
https://gitlab.com/petsc/petsc/-/blob/main/src/mat/tests/ex230.c

There are some questions about MatPreallocator.

1. In parallel run, all the MPI ranks should do the same preallocator
procedure?

2. In ex230.c, the difference between ex1 of ex230.c and ex2 of ex230.c is
the block.
Developers want  to show using block is more efficient method than just
using matsetvalues?

Thanks,
Hyung Kim

2022년 12월 13일 (화) 오전 1:43, Junchao Zhang <[email protected]>님이 작성:

> 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 김성익 <[email protected]> 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
>>
>>

Reply via email to