<div class="gmail_quote">On Sat, Jan 28, 2012 at 13:27, Barry Smith <span dir="ltr"><<a href="mailto:bsmith@mcs.anl.gov">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">
<div id=":3qa">  Since MatSetUpPreallocated() was called inside MatSetValues() the macro MatPreallocated() was added to prevent unneeded functions calls in the inner kernel MatSetValues().<br>
<br>
   With modern PETSc we can get rid of MatPreallocated() everywhere and use MatSetUpPreallocation() directly everywhere then<br>
<br>
1)  say we don't think that function call overhead matters where it is called now or<br></div></blockquote><div><br></div><div>This, but we have to remove it from the other functions that also should not be collective: MatGetRow, MatGetRowUpperTriangular, etc are obvious. What about MatGetOwnershipRange()? If the user had</div>
<div><br></div><div>MatGetSizes(A,&m,NULL);</div><div>if (m) {</div><div>  MatGetOwnershipRange(A,&rstart,&rend);</div><div>  for (i=rstart; i<rend; i++) { ... }</div><div>}</div><div><br></div><div>this could deadlock if there are any empty procs. And MatGetBlockSize().</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div id=":3qa">
2) turn it into a static inline function.</div></blockquote><div><br></div><div>It can only be called from functions that are already collective.</div></div>