On 06.06.2012 13:06, Jed Brown wrote: > On Wed, Jun 6, 2012 at 5:22 AM, Alexander Grayver > <agrayver at gfz-potsdam.de <mailto:agrayver at gfz-potsdam.de>> wrote: > > In my program I assemble huge matrix (~500 millions of double > complex nnz) and all MatSetValues calls are done before > MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY). > I'm wondering if it makes sense to use MatAssemblyBegin(A, > MAT_FLUSH_ASSEMBLY) in between? In docs it is said: > >> MatSetValues > > <http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatSetValues.html#MatSetValues>() > generally caches the values. > > How does the caching work actually? Is this additionally allocated > memory (dynamic or not)? > > > Only entries that are generated on a different process than they need > to be stored will be cached. If you generate most entries on the > correct process (the owned rows for MPI*AIJ matrices), there is no > need to flush.
Jed, Makes sense. I should have thought about that. I have off process entries, although not many. Thanks. > > You can also look at -log_summary to see if an inordinate amount of > time is spent in assembly. -- Regards, Alexander -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20120606/4f4ae627/attachment.html>
