On Mon, Oct 31, 2011 at 4:29 PM, Barry Smith <span dir="ltr">&lt;<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>&gt;</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"><br>
On Oct 31, 2011, at 11:14 AM, Matthew Knepley wrote:<br>
<br>
&gt; On Mon, Oct 31, 2011 at 3:54 PM, Barry Smith &lt;<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>&gt; wrote:<br>
&gt;<br>
&gt;  Matt,<br>
&gt;<br>
&gt;    Won&#39;t you always want ADD_VALUES support? After all this is how finite element matrix assembly is done. Each element stiffness becomes one block in the batch and then they get added into the global matrix? How would one use the current batch routine with finite elements?<br>

&gt;<br>
&gt; Of course ADD_VALUES works. What does not work is calling it multiple times on the same matrix, for the reasons I stated.<br>
<br>
</div>   Maybe you should change the manual page to make this whole business clear. Currently one could interpret it in a variety of ways.<br>
<br>
   For example &quot;Inserts many blocks of values into a matrix at once.&quot;   &quot;Inserts&quot; isn&#39;t really right<br>
<br>
   and &quot;In the future, we may extend this routine to handle rectangular blocks, and additive mode.&quot;   What the hey is &quot;additive mode&quot;? I thought ADD_VALUES as opposed to INSERT_VALUES.<br>
<br>
    and just say that it cannot be called multiply times before MatAssemblyBegin/End ....</blockquote><div><br></div><div>Done.</div><div><br></div><div>   Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<font color="#888888"><br>
    Barry<br>
</font><div><div></div><div class="h5"><br>
&gt;<br>
&gt;    Matt<br>
&gt;<br>
&gt;<br>
&gt;    Barry<br>
&gt;<br>
&gt; On Oct 31, 2011, at 10:48 AM, Matthew Knepley wrote:<br>
&gt;<br>
&gt; &gt; On Mon, Oct 31, 2011 at 12:31 PM, Fredrik Heffer Valdmanis &lt;<a href="mailto:fredva@ifi.uio.no">fredva@ifi.uio.no</a>&gt; wrote:<br>
&gt; &gt; 2011/10/30 Matthew Knepley &lt;<a href="mailto:knepley@gmail.com">knepley@gmail.com</a>&gt;<br>
&gt; &gt; On Sun, Oct 30, 2011 at 12:22 PM, Fredrik Heffer Valdmanis &lt;<a href="mailto:fredva@ifi.uio.no">fredva@ifi.uio.no</a>&gt; wrote:<br>
&gt; &gt; 2011/10/28 Matthew Knepley &lt;<a href="mailto:knepley@gmail.com">knepley@gmail.com</a>&gt;<br>
&gt; &gt; On Fri, Oct 28, 2011 at 10:24 AM, Fredrik Heffer Valdmanis &lt;<a href="mailto:fredva@ifi.uio.no">fredva@ifi.uio.no</a>&gt; wrote:<br>
&gt; &gt; Hi,<br>
&gt; &gt;<br>
&gt; &gt; I am working on integrating the new GPU based vectors and matrices into FEniCS. Now, I&#39;m looking at the possibility for getting some speedup during finite element assembly, specifically when inserting the local element matrix into the global element matrix. In that regard, I have a few questions I hope you can help me out with:<br>

&gt; &gt;<br>
&gt; &gt; - When calling MatSetValues with a MATSEQAIJCUSP matrix as parameter, what exactly is it that happens? As far as I can see, MatSetValues is not implemented for GPU based matrices, neither is the mat-&gt;ops-&gt;setvalues set to point at any function for this Mat type.<br>

&gt; &gt;<br>
&gt; &gt; Yes, MatSetValues always operates on the CPU side. It would not make sense to do individual operations on the GPU.<br>
&gt; &gt;<br>
&gt; &gt; I have written batched of assembly for element matrices that are all the same size:<br>
&gt; &gt;<br>
&gt; &gt;   <a href="http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/docs/manualpages/Mat/MatSetValuesBatch.html" target="_blank">http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/docs/manualpages/Mat/MatSetValuesBatch.html</a><br>

&gt; &gt;<br>
&gt; &gt; Thanks. I assume that the best way to use the batch function is to batch up all element matrices and insert all with one function call? Or is it recommended to split it up into several smaller batches?<br>
&gt; &gt;<br>
&gt; &gt; Right now, several batches does not work.For insertion to be efficient, you should keep the matrices in COO<br>
&gt; &gt; format, or convert them back. We do not do either right now. The idea is to see if it ever matters for applications.<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; OK, thanks.<br>
&gt; &gt;<br>
&gt; &gt; Any estimate on when additive mode will be added to MatSetValuesBatch? As it is now, this batch function is of limited use to us, as it forces us to maintain an extra internal data structure to handle accumulation of numbers that are inserted at the same indices in the matrix.<br>

&gt; &gt;<br>
&gt; &gt; I cannot understand what you need this for. All you need is the complete list of element matrices.<br>
&gt; &gt;<br>
&gt; &gt; Any particular reason you chose not to support additive mode in this first implementation? Are there any considerations I should be aware of?<br>
&gt; &gt;<br>
&gt; &gt; I said why above. It would require data structure changes and code support, and we would need some level of user request for that.<br>
&gt; &gt;<br>
&gt; &gt;    Matt<br>
&gt; &gt;<br>
&gt; &gt; Thanks,<br>
&gt; &gt;<br>
&gt; &gt; Fredrik<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; --<br>
&gt; &gt; What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>
&gt; &gt; -- Norbert Wiener<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>
&gt; -- Norbert Wiener<br>
<br>
</div></div></blockquote></div><br><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>