<div dir="ltr"><div class="gmail_default" style="font-size:small">Hi,</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">Thanks a lot for the replies. They are really helpful.</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">I just used the ksp ex2.c as an example to test the parallelization on my cluster, since the example have flexible number of unknowns.</div><div class="gmail_default" style="font-size:small">I do observe that for larger size of the problem, the speed-up shows better with more processors.</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">Now, I'm moving on incorporating PETSC into our real CPFEM code, and investigating the suitable solver and preconditioners for the specific system.</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">Thanks again.</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">Bests,</div><div class="gmail_default" style="font-size:small">Jinlei</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small"><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Sep 7, 2016 at 10:26 PM, Barry Smith <span dir="ltr"><<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><br>
> On Sep 7, 2016, at 8:37 PM, Jinlei Shen <<a href="mailto:jshen25@jhu.edu">jshen25@jhu.edu</a>> wrote:<br>
><br>
> Hi,<br>
><br>
> I am trying to test the parallel scalablity of iterative solver (CG with BJacobi preconditioner) in PETSc.<br>
><br>
> Since the iteration number increases with more processors, I calculated the single iteration time by dividing the total KSPSolve time by number of iteration in this test.<br>
><br>
> The linear system I'm solving has 315342 unknowns. Only KSPSolve cost is analyzed.<br>
><br>
> The results show that the parallelism works well with small number of processes (less than 32 in my case), and is almost perfect parallel within first 10 processors.<br>
><br>
> However, the effect of parallelization degrades if I use more processors. The wired thing is that with more than 100 processors, the single iteration cost is slightly increasing.<br>
><br>
> To investigate this issue, I then looked into the composition of KSPSolve time.<br>
> It seems KSPSolve consists of MatMult, VecTDot(min),VecNorm(min),<wbr>VecAXPY(max),VecAXPX(max),<wbr>ApplyPC. Please correct me if I'm wrong.<br>
><br>
> And I found for small number of processors, all these components scale well.<br>
> However, using more processors(roughly larger than 40), MatMult, VecTDot(min),VecNorm(min) behaves worse, and even increasing after 100 processors, while the other three parts parallel well even for 1000 processors.<br>
> Since MatMult composed major cost in single iteration, the total single iteration cost increases as well.(See the below figure).<br>
><br>
> My question:<br>
> 1. Is such situation reasonable?<br>
<br>
</span>   Yes<br>
<span class=""><br>
> Could anyone explain why MatMult scales poor after certain number of processors? I heard some about different algorithms for matrix multiplication. Is that the bottleneck?<br>
<br>
</span>   The MatMult inherently requires communication, as the number of processors increases the amount of communication increases while the total work needed remains the same. This is true regardless of the particular details of the algorithms used.<br>
<br>
   Similar computations like norms and inner products require a communication among all processes, as the increase the number of processes the communication time starts to dominate for norms and inner products hence they begin to take a great deal of time for large numbers of processes.<br>
<span class="">><br>
> 2. Is the parallelism dependent of matrix size? If I use larger system size,e.g. million , can the solver scale better?<br>
<br>
</span>   Absolutely. You should look up the concepts of strong scaling and weak scaling. These are important concepts to understand to understand parallel computing.<br>
<span class=""><br>
><br>
> 3. Do you have any idea to improve the parallel performance?<br>
<br>
</span>  Worrying about parallel performance should never be a priority, the priorities should be "can I solve the size problems I need to solve in a reasonable amount of time to accomplish whatever science or engineering I am working on". To be able to do this first depends on using good discretization methods for your model (i.e. not just first or second order whenever possible) and am I using efficient algebraic solvers when I need to solve algebraic systems. (As Justin noted bjacobi GMRES is not a particularly efficient algebraic solver). Only after you have done all that does improving parallel performance come into play; you know you have an efficient discretization and solver and now you want to make it run faster in parallel. Since each type of simulation is unique you need to work through the process for the problem YOU need to solve, you can't just run it for a model problem and then try to reuse the same discretizations and solvers for your "real" problem.<br>
<br>
   Barry<br>
<span class=""><br>
><br>
> Thank you very much.<br>
><br>
> JInlei<br>
><br>
</span>> <image.png><br>
><br>
><br>
<br>
<br>
</blockquote></div><br></div>