On Mon, May 4, 2009 at 2:56 PM, Randall Mackie <span dir="ltr"><<a href="mailto:rlmackie862@gmail.com">rlmackie862@gmail.com</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Jed,<br>
<br>
Can you explain how to tell if the matrix is truly blocked? What's the<br>
difference between a blocked matrix and one with several degrees of freedom<br>
at each node, or are they the same thing? I'm solving Maxwell's equations<br>
in 3D, so I have three vector field components at each node, is that what<br>
you mean by blocked?</blockquote><div><br>Yes, that is blocked.<br><br> Matt<br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
Thanks, Randy<br>
<br>
<br>
Jed Brown wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="im">
Ryan Yan wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Could you make a little bit more clarification<br>
on why the MatSetValuesBlocked() have some advantage on blocked structure?<br>
</blockquote>
<br></div>
In addition to the assembly advantages that Satish pointed out, BAIJ<br>
requires less storage for the column indices, effectively improving the<br>
arithmetic intensity of many kernels, and speeding up matrix<br>
factorization (e.g. symbolic factorization only needs to compute fill in<br>
terms of blocks instead of individual elements). The use of inodes with<br>
AIJ (default when applicable) reduces the memory bandwidth requirements<br>
of the column indices, turns point relaxation smoothers (SOR) into<br>
stronger block relaxation, and allows a certain amount of unrolling.<br>
BAIJ requires even less metadata, provides more regular memory access,<br>
and does more unrolling.<br>
<br>
If your matrix is truly blocked, BAIJ should provide better performance<br>
with all preconditioners that support it. Many third-party<br>
preconditioners will not work with BAIJ, so it is useful to give your<br>
matrix a prefix (or check the options database if you are getting your<br>
matrix from a DA or similar) so that you can set it's type with<br>
-foo_mat_type when using a preconditioner that requires it.<br>
<br>
Jed<br>
<br>
</blockquote>
</blockquote></div><br><br clear="all"><br>-- <br>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener<br>