<div dir="ltr"><div class="gmail_default" style="font-family:georgia,serif;font-size:small;color:#073763">Thank you all! I will check with a smaller example to see how my allocation is doing. </div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div>--</div><div><br></div><div><font face="georgia, serif" size="4">José Abell </font></div><div><font face="georgia, serif"><i>PhD Candidate</i></font></div><div><font face="georgia, serif">Computational Geomechanics Group</font></div><div><font face="georgia, serif"><span style="font-size:12.7272720336914px">Dept. of Civil and Environmental Engineering</span><br></font></div><div><font face="georgia, serif">UC Davis</font></div><div><font face="georgia, serif"><a href="http://www.joseabell.com" target="_blank">www.joseabell.com</a></font></div><div><br></div></div></div></div></div></div></div></div></div>
<br><div class="gmail_quote">On Thu, Dec 17, 2015 at 10:59 AM, 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 Dec 17, 2015, at 11:12 AM, Dave May <<a href="mailto:dave.mayhem23@gmail.com">dave.mayhem23@gmail.com</a>> wrote:<br>
><br>
><br>
><br>
> On Thursday, 17 December 2015, Jose A. Abell M. <<a href="mailto:jaabell@ucdavis.edu">jaabell@ucdavis.edu</a>> wrote:<br>
> Thank you Dave!<br>
><br>
> Do you have a rough idea of how long a matrix like that should take to assemble?<br>
> Not hours. Right?<br>
><br>
> If the preallocation is correct, and most of the entries to be inserted live locally (and don't need to be scattered to another rank), it should definitely not take hours.<br>
<br>
</span>   If the preallocation is correct then the time to do the first assembly may take maybe twice as long as subsequent assemblies but it should not be much more than that.<br>
<span class="HOEnZb"><font color="#888888"><br>
  Barry<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
><br>
><br>
><br>
> Regards,<br>
> Jose<br>
><br>
> --<br>
><br>
> José Abell<br>
> PhD Candidate<br>
> Computational Geomechanics Group<br>
> Dept. of Civil and Environmental Engineering<br>
> UC Davis<br>
> <a href="http://www.joseabell.com" rel="noreferrer" target="_blank">www.joseabell.com</a><br>
><br>
><br>
> On Thu, Dec 17, 2015 at 12:58 AM, Dave May <<a href="mailto:dave.mayhem23@gmail.com">dave.mayhem23@gmail.com</a>> wrote:<br>
><br>
><br>
> On 17 December 2015 at 08:06, Jose A. Abell M. <<a href="mailto:jaabell@ucdavis.edu">jaabell@ucdavis.edu</a>> wrote:<br>
> Hello dear PETSc users,<br>
><br>
> This is a problem that pops up often, from what I see, in the mailing list. My program takes a long time assembling the matrix.<br>
><br>
> What I know:<br>
><br>
>       • Matrix Size is (MatMPIAIJ) 2670402<br>
>       • Number of processes running PETSc: 95<br>
>       • Not going to virtual memory (no swapping, used mem well withing each node's capacity)<br>
>       • System is partitioned with ParMETIS for load balancing<br>
>       • I see memory moving around in each node (total used memory changes a bit, grows and then frees)<br>
>       • Matrix is filled in blocks of size 81x81 (FEM code, so this ends up being a sparse matrix)<br>
>       • I don't do flushes at all. Only MAT_FINAL_ASSEMBLY when all the MatSetValues are done.<br>
> Should I do MAT_FLUSH_ASSEMBLY even though I have enough memory to store the buffers? If so, how often? Every 100 blocks?<br>
><br>
> What else could it be?<br>
><br>
> Its taking several hours to asseble this matrix. I re-use the sparsity pattern, so subsequent assemblies are fast. Does this mean that my preallocation is wrong?<br>
><br>
> The preallocation could be wrong. That is the usual cause of very slow matrix assembly. To confirm this hypothesis, run your code with the command line option -info. You will get an enormous amount of information in stdout. You might consider using -info with a smallish problem size / core count.<br>
><br>
> Inspect the output generated by -info and look for lines like this:<br>
><br>
> [1] MatAssemblyEnd_SeqAIJ(): Number of mallocs during MatSetValues() is 0<br>
><br>
> If the number of mallocs during MatSetValues() is not zero, then your preallocation is not exactly correct. A small number of mallocs, say less than 10, might be accepted (performance wise). However if the number of mallocs is > 100, then assembly time will be terribly slow.<br>
><br>
> Thanks,<br>
>   Dave<br>
><br>
><br>
><br>
><br>
> Regards,<br>
><br>
><br>
><br>
><br>
> --<br>
><br>
> José Abell<br>
> PhD Candidate<br>
> Computational Geomechanics Group<br>
> Dept. of Civil and Environmental Engineering<br>
> UC Davis<br>
> <a href="http://www.joseabell.com" rel="noreferrer" target="_blank">www.joseabell.com</a><br>
><br>
><br>
><br>
<br>
</div></div></blockquote></div><br></div>