<div dir="ltr">On Mon, Sep 23, 2013 at 12:30 PM, Jed Brown <span dir="ltr"><<a href="mailto:jedbrown@mcs.anl.gov" target="_blank">jedbrown@mcs.anl.gov</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">We have some motivated users that would like a way to assemble matrices<br>
on a device, without needing to store all the element matrices to global<br>
memory or to transfer them to the CPU.  Given GPU execution models, this<br>
means we need something that can be done on-the-spot in kernels.  So<br>
what about a function that can be called by device threads?<br>
<br>
PetscErrorCode MatOpenCLGetSetValuesSource(Mat, synchronization_mechanism, char **);<br>
<br>
The user concatenates this type-specialized code into their source and<br>
calls MatSetValues().  The users I'm talking to here synchronize by<br>
coordinating threads using coloring of a sort.  The user still needs to<br>
call MatAssemblyBegin/End from outside a kernel, though that function<br>
may or may not need to invoke its own kernel.<br>
<br>
Crazy?<br>
</blockquote></div><br>Okay, here is how I understand GPU matrix assembly. The only way it makes sense to me is</div><div class="gmail_extra">in COO format which you may later convert. In mpiaijAssemble.cu I have code that</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">  - Produces COO rows</div><div class="gmail_extra">  - Segregates them into on and off-process rows</div><div class="gmail_extra">  - Sorts and reduces by key</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">This can obviously be done incrementally, so storing a batch of element matrices to global</div><div class="gmail_extra">memory is not a problem. I think the extra bandwidth is balanced by the efficiency of the method.</div>
<div class="gmail_extra">I do not know of something better that can beat it with smaller bandwidth.</div><div class="gmail_extra"><br></div><div class="gmail_extra">    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
</div></div>