On Wed, Nov 9, 2011 at 4:06 PM, Jed Brown <span dir="ltr"><<a href="mailto:jedbrown@mcs.anl.gov">jedbrown@mcs.anl.gov</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im"><div class="gmail_quote">On Wed, Nov 9, 2011 at 09:57, Lisandro Dalcin <span dir="ltr"><<a href="mailto:dalcinl@gmail.com" target="_blank">dalcinl@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div>Are you 100% sure about this? What's the point of wasting cycles by<br>
explicitly calling Memzero in VecCreate_Seq? I bet may codes out there<br>
(and even PETSc's testsuite) will break if you do not initialize all<br>
entries to zero! For example, if you create a Vec or Mat and<br>
immediately enter a loop using {Vec|Mat}SetValues(..., ADD_VALUES), I<br>
think most people would expect this to work.</div></blockquote></div><br></div><div>In practice, they are initialized to prevent constant support requests. If we intend for it to "mean" uninitialized, then Memzero in VecCreate_Seq() should be turned off when run under Valgrind, so that we can find places where the assumption is made.</div>

<div><br></div><div>This is not nearly as simple as it may seem on NUMA. You want to fault the memory in the same pattern as it will be used later. It would be hard for Memzero to know how you wanted the memory faulted, so it would be expected to fault the memory incorrectly. Either we need a way to specify a locality (maybe as a coloring) so that Memzero can be correctly threaded, or we should NOT initialize the memory and rely on the user to do that. As much of a hassle as the latter is, it's still not a complete solution because all the Vec operations should use threads with the same memory distribution as mesh traversal.</div>

<div><br></div><div>For the hardware, it is probably sufficient to make the NUMA partition either full blocks or interleaved at page-size granularity.</div>
</blockquote></div><br>The simpler answer is yes, I always initialize the Mat or Vec to zero when I use it. Even if its initialized when created,<div>I almost always get something from DMGetGlobalVector() etc. which could have been used before.</div>
<div><br></div><div>   Matt<br clear="all"><div><br></div>-- <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>
</div>