Hi Hyung, First, verify that you are preallocating correctly. Run with '-info' and grep on "alloc" in the large output that you get. You will see lines like "number of mallocs in assembly: 0". You want 0. Do this with one processor and the 8.
I don't understand your loop. You are iterating over vertices. You want to iterate over elements. Mark On Mon, Dec 12, 2022 at 6:16 AM 김성익 <ksi2...@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 > >